تبعيات أرشفة البصل في نفس الطبقة: البنية التحتية وتواصل الويب

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

سؤال

أقوم بتصميم تطبيق ASP.NET MVC باستخدام العمارة البصل وصفه جيفري باليرمو.

إنه مشروع ASP.NET MVC 2.0 ، حيث أتطلب كتابة جميع المشاهدات بقوة باستخدام نماذج عرض مخصصة - لن ننقل نماذج مجال إلى وجهات نظرنا. نحن نستخدم Automapper للقيام بالترجمة - يتم عزل السيارات في البنية التحتية ، لا تعرف الويب أو تهتم باستخدام السيارات.

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

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

سؤالي هو: نظرًا لأن كلا المشروعين تقنيًا على مشارف البصل (في نفس الطبقة) - هل يُسمح لمشروع واحد أن يكون له اعتماد على مشروع آخر في تلك الطبقة؟ هل يلاحظ أي شخص أي مخاطر محتملة مع هذا التصميم؟

سيكون التصميم البديل هو نقل واجهات iviewmapper إلى جوهر - ولكن هذا سيكون مستحيلًا لأن Core لا يمكنه الوصول إلى فئات ViewModel. يمكنني أيضًا نقل نماذج العرض إلى قلب ، لكنني أشعر أنها لن تنتمي إلى هناك ، لأنها خاصة بطبقة واجهة المستخدم.

الهندسة المعمارية المقترحة هي كما يلي - لاحظ أن البنية التحتية لها اعتماد على Core و Web. لا يزال الويب معزولًا ولديه الوصول إلى منطق الأعمال الأساسي فقط.

http://www.matthideer.com/images/onion-arch.png

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

المحلول

أنت محق في أنك لا تريد أن تعتمد البنية التحتية على واجهة المستخدم (الويب) ، لكنني أقوم بتكسير هذه القاعدة أحيانًا.

أود أن أفكر بدلاً من iviewModelMapping ، قم بإنشاء imapper مع Method Map (). بعد ذلك ، يمكن أن تحتوي الواجهة على تطبيقات قد تكون لها علاقة برسم خرائط نموذج العرض ، أو ربما مجرد رسم الخرائط العادية. في كلتا الحالتين ، يمكن أن تكون هذه الواجهة في جوهرها لأنها ليست مرتبطة بشكل دلالي بأي نوع من النماذج.

رسم كبير. آمل أن أجبت على لحم سؤالك. تتمثل الفلسفة الكلية في بنية البصل في الحفاظ على منطق عملك ونموذجك في الوسط (الأساسي) لتطبيقك ودفع تبعياتك إلى الخارج قدر الإمكان.

نصائح أخرى

حاول التحرك رسم الخرائط داخل الويب طبقة.

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

يمكنك إنشاء مجلد " builder" في واجهة المستخدم. أضف ملف واجهة واحد فيه ، مثال .. ibuilder أو imapper وأعلن طريقة مثل ConvertToviewModel أو CreateMapping فيه. كل ما تحب.

*Builder ** ibuilder.cs -declare طريقة هنا. ** builder.cs - - قم بتنفيذ الطريقة هنا ، وتحديد التعيين بين ViewModel و DomainModel المقابل (المرجع من الطبقة الأساسية) وإرجاع ViewModel المناسبة هنا.

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