سؤال

وأنا جديدة على التبعية حقن وكان توجيه السؤال / الحاجة.

وكان أحد التطبيقات التي تستخدم نمط مستودع للوصول إلى البيانات. كنت StructureMap للحصول على مستودع الصحيح وكل عملت بشكل جيد.

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

ما يبدو الخطأ في هذا؟

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

المحلول

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

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

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

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

إذا كنت تفترض جميع العملاء سوف تستخدم حاوية محددة (على سبيل المثال StructureMap)، ثم يمكنك تخفيف شروط التسجيل من خلال توفير السجلات التي تغلف جميع احتياجات التسجيل المحددة للعميل.

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

نصائح أخرى

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

ولقد كتبت هذا بلوق وظيفة على وجه التحديد حول NHiberante ولكن اذا نظرتم الى نمط مستودع تنفيذها في يمكنك بسهولة تغيير رمز معين NH استخدام backingstore الخاص بك.

إنشاء مشترك عامة وتوسع NHiberate مستودع

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