سؤال

لدي كائن بيانات (دعنا نقول أنه يسمى "الإدخال") يحتوي على مجموعة من الحالات المحتملة التي تبدو كما يلي:

1 - Created
2 - File added
3 - Approved
4 - Invalid

يتم تمثيل ذلك في قاعدة البيانات بجدول "الحالة" مع مفتاح أساسي للترقيم التلقائي، ثم حقل "معرف الحالة" في الجدول الرئيسي، مع إعداد العلاقات المناسبة.

في طبقة البيانات (المخصصة)، لدي كائن "الإدخال"، وفي الوقت الحالي، أعلن أيضًا عن التعداد مع تحديد الحالات المذكورة أعلاه.أخيرًا أعلن عن مثيل خاص لهذا التعداد مع الملكية العامة المناسبة.

في طريقة "Commit()" الخاصة بي، قمت بإرسال مثيل Enum إلى عدد صحيح وتمريره إلى إجراء التحديث المخزن.

في طريقة "GetEntry()" الثابتة الخاصة بي، من الواضح أنه سيتم تمرير عدد صحيح من قاعدة البيانات.ثم أستخدم طريقة "Enum.Parse()" لاستخراج كائن يمثل مثيلًا لـ Enum الخاص بي والذي يتوافق مع العدد الصحيح للحالة الذي تم إرجاعه.لقد قمت بإلقاء هذا على نوع التعداد الخاص بي وقمت بتعيينه للمتغير الخاص المحلي.

سؤالي بسيط جدًا - هل هذا النهج مناسب، وإذا لم يكن ما هو البديل الأفضل، بخلاف مجرد تخزين قيمة الأعداد الصحيحة الأولية (التي لا أكرهها بالضرورة).

سبب سؤالي هو أن كل هذا يبدو فوضويًا بشكل لا يصدق بالنسبة لي، مع كل عملية الاختيار والمحافظة على قائمتين من نفس مجموعة القيم.أوافق على أن الفائدة تكمن في تجربة أفضل لمستهلك كائن البيانات، ولكن على الرغم من ذلك...

شكرًا!

هل كانت مفيدة؟

المحلول

لدينا شيئا مألوفا في واحدة من مشاريعنا. لدينا جدول containting أنواع العناصر. هذه الأنواع لها الهوية، في رمز لدينا التعداد مع نفس معرف. الشيء هو، في قاعدة البيانات لدينا لا تستخدم ترقيم تلقائي (الهوية) لذلك لدينا السيطرة الكاملة للهوية. وعند حفظ هدفنا نحن نأخذ فقط هوية من التعداد لحفظ الكائن. اعتقد ايضا ان هذا النهج الفوضى ولكنها ليست أن إنس سيئة.

نصائح أخرى

وهذا الأسلوب يبدو على ما يرام بالنسبة لي.

في الماضي كنت قد فعلت الشيء نفسه ولكن لديها أيضا الجدول الذي يحتوي على صف لكل عضو في التعداد هذا الجدول كان ثم المفتاح الخارجي لأي الجدول الذي يستخدم قيمة التعداد، فقط حتى شخص قراءة قاعدة البيانات يمكن أن نفهم لماذا كان كل حالة دون الحاجة لمعرفة التعداد الفعلي.

وعلى سبيل المثال إذا كان لي التعداد مثل

enum status
{
    Active,
    Deleted,
    Inactive
}

وكنت أود أن يكون جدول يسمى الحالة التي سيكون لها السجلات التالية

واسم ID
0 أحدث
1
المحذوفة 2 غير فعال

وهذا الجدول عندئذ يكون المفتاح الخارجي إلى أي الجداول التي تستخدم هذا التعداد.

نعم هذا على ما يرام!

وPLEASE دائما بوضوح تعيين القيم من هذا القبيل. وبهذه الطريقة اذا كان هناك من يذهب من أي وقت مضى أن أضيف شيئا سيدركون القيم مهمة ويجب أن لا يكون عبثوا.

enum status
{
    Active = 1,
    Deleted = 2,
    Inactive = 3
}

إذا كنت تمرير قيمة حول عبر WCF أود أن أوصى مضيفا

  NULL = 0

وإلا إذا حاولت تسلسل 0 قادمة من قاعدة البيانات التي سوف تحصل على خطأ فظيع وانها سوف يأخذك إلى الأبد التصحيح.

وجدول قاعدة البيانات بحث ضروري. والتعداد برنامجي هو مناسب لتجنب "الأرقام السحرية" في كود

وإذا لم التعليمات البرمجية تحتاج لمعالجة الوضع، ومع ذلك، فإن التعداد غير ضروري

أفعل هذا النهج مع Enums طوال الوقت.إذا كان عنصرًا بسيطًا مثل الحالة التي لا يُتوقع أن تتغير على الإطلاق، فأنا أفضل التعداد.تعتبر عملية التحليل والصب عملية ذات تأثير منخفض جدًا.

لقد قمت بهذا بنجاح مع Linq to Sql لبعض الوقت دون أي مشاكل.سوف يقوم Linq بالفعل بالتحويل من Enum إلى int والعودة تلقائيًا.

الكود لا يقتصر على السرعة فحسب، بل يتعلق أيضًا بسهولة القراءة.التعدادات تجعل التعليمات البرمجية قابلة للقراءة.

للإجابة على سؤالك مباشرة، هذا تطبيق صالح للغاية.

إذا التعليمات البرمجية يتطلب وضع المعروفة القيم "الحالة" (التي قمت بتحديدها في التعداد الخاص بك)، ثم هو على الأرجح أيضا شرط أن توجد هذه القيم "الحالة" في قاعدة البيانات. لأنها يجب أن يكون موجودا يجب أن يكون أيضا السيطرة على Status_ID المخصصة لكل من تلك القيم.

وإسقاط الهوية ومجرد مجموعة صراحة معرفات قيمة البحث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top