هل لدى أي شخص مقالة جيدة أو نصيحة جيدة لتسمية الفصل لتطبيقات الويب ذات المستوى n؟
-
02-07-2019 - |
سؤال
أنا معتاد على التخطيط الذي يقدمه LLBLGen عندما يقوم بإنشاء كائنات بناءً على بنية قاعدة البيانات، والتي قد تولد ملفات الفئات التالية لجدول "مستخدم" محدد في قاعدة البيانات:
/EntityClasses/UserEntity.vb
/CollectionClasses/UserCollection.vb
وهذا يوفر بعض الوظائف الأساسية للوصول إلى البيانات.ومع ذلك، عندما تريد تنفيذ منطق الأعمال علاوة على ذلك، كيف تقوم بتخطيط الأمور؟على سبيل المثال، بالنظر إلى بنية الجدول التي قد تبدو كما يلي:
USER
userId
firstName
lastName
username
password
lockedOut
ماذا لو أردت قفل مستخدم؟ما هو الكود الذي ستستدعيه من طبقة العرض التقديمي؟هل يمكنك إنشاء مثيل لفئة UserEntity، والقيام بما يلي:
User = new UserEntity(userId)
User.lockedOut = true
User.Save()
أو هل يمكنك إنشاء فئة جديدة، مثل UserHelper (/BusinessLogic/UserHelper.cs)، والتي قد تحتوي على وظيفة LockOutUser.سيؤدي ذلك إلى تغيير الرمز ليكون:
UH = new UserHelper()
UH.LockOutUser(userId)
أو هل يمكنك توسيع فئة UserEntity الأساسية وإنشاء UserEntityExt الذي يضيف الوظيفة الجديدة؟لذلك، قد يبدو الكود من طبقة العرض كما يلي:
User = new UserEntityExt(userId)
User.LockOutUser()
أو...هل ستفعل شيئًا آخر تمامًا؟
وماذا ستكون بنية الدليل/مساحة الاسم واصطلاحات تسمية الملف/الفئة؟
المحلول
أعتقد أن ما تبحث عنه هو طبقة خدمة توضع فوق كائنات المجال.لديك هذا بشكل أساسي مع خيارك الثاني على الرغم من أنني قد أسميه UserService أو UserTasks.من خلال تغليف عملية LockUser هذه في مكان واحد، سيكون من السهل تغييرها لاحقًا عندما يكون هناك المزيد من الخطوات أو كائنات المجال الأخرى المعنية.سيكون هذا أيضًا هو المكان المناسب لتنفيذ المعاملات عند التعامل مع استدعاءات قاعدة بيانات متعددة.