أين تضع أشياء محددة للتكنولوجيا في نموذج المجال؟

StackOverflow https://stackoverflow.com/questions/2004879

سؤال

لدينا تطبيق، بالإضافة إلى العديد من الأشياء، يقوم ببعض التغييرات في Active Directory (إضافة / إزالة المستخدم من المجموعة، وقم بتغيير قيم السمة على المستخدم، إلخ).

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

يجب علينا وضع جميع رمز الوصول Active Directory في طبقة الوصول إلى البيانات جنبا إلى جنب مع وصول DB لدينا، أو هل هو موافق لإنشاء مكتبة Active Directory من الوظائف واستدعاء هذه المكتبة مباشرة من نموذج المجال؟ هذا يجعل كائن المجال تدرك مستمرا وهذا ربما فكرة سيئة؟

أو يجب أن يتم تنفيذ جميع وصول Active Directory في طبقة الخدمة بدلا من ذلك وليس حتى إشراك طبقة المجال؟

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

المحلول

يجب أن تكون نماذج النطاق التكنولوجيا الملحد, ، لذلك لا تضع رمز الإعلان الخاص بك في نموذج المجال.

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

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

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

هذا يناسب جيدا مع تصميم مدفوعة المجال ومفهوم طبقة مكافحة الفساد.

يمكنك استخدام حقن التبعية (DI) لسلك مستودعات الخرسانة مع نموذج المجال الخاص بك.

نصائح أخرى

أعتقد أن الأشياء الخاصة بالتكنولوجيا هي تفاصيل التنفيذ، لا ينبغي وضعها في نموذج المجال.

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