سؤال

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

حيث يمكنك رسم خط على ما واجهة بها مقابل فقط إضافة خاصية الفصل ؟

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

المحلول

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

وهناك قاعدة جيدة من التجربة هو أنه إذا كان من الصعب جدا أن اختبار, كنت قد حصلت على بعض القضايا مع واحد مسؤولية ثابتة التبعيات.عزل التعليمات البرمجية التي تنفذ وظيفة واحدة في فئة كسر هذا ثابت التبعية عن طريق استخراج واجهة استخدام DI إطار لحقن المثيل الصحيح في وقت التشغيل.عند القيام بذلك, يمكنك جعله تافهة لاختبار اثنين من الأجزاء كل على حدة.

نصائح أخرى

المشكلة الرئيسية مع حقن التبعية هو أنه في حين أنه يعطي مظهر العمارة المتباعدة ، فإنه في الحقيقة لا.

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

حقن التبعية ينبغي أن تستخدم فقط في أجزاء من التطبيق التي تحتاج إلى تغيير حيوي بدون ترجمة قاعدة رمز.

يستخدم هذا رأيت من المفيد التحول من نمط التحكم:

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

حقن التبعية ينبغي أن تستخدم فقط في أجزاء من التطبيق التي تحتاج إلى تغيير حيوي بدون ترجمة قاعدة رمز

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

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

ماذا يعني "مجرد إضافة خاصية الصف؟"

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

تحرير:أنت ذكرت الكثير من الواجهات في منشئ.أنصح باستخدام واضعي/حاصل بدلا من ذلك.أجد أن يجعل الأمور أسهل بكثير للحفاظ على المدى الطويل.

أفعل ذلك فقط عندما يساعد مع الانفصال من الشواغل.

ربما عبر المشروع سوف توفر واجهة منفذو في واحدة من مكتبتي المشروع تنفيذ المشروع سيضخ مهما التنفيذ المحددة في.

ولكن ذلك حول هذا الموضوع...في جميع الحالات الأخرى كان فقط لجعل النظام معقدة دون داع

حتى مع كل الحقائق والعمليات في العالم..كل قرار يتلخص في حكم الكلمة - نسيت أين قرأت أن
أعتقد أنه أكثر من تجربة / رحلة الدعوة الوقت.أساسا إذا كنت ترى التبعية كمرشح الكائن الذي يمكن أن يستبدل في المستقبل القريب ، استخدام حقن التبعية.إذا رأيت 'classA وتوابعها' باعتبارها كتلة واحدة من أجل إحلال ثم ربما لن تستخدم دي ل أ deps.

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

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

عنصر آخر لا يتصارع مع حيث يجب استخدام التبعية الحقن ؟ أين كنت تأخذ الخاص بك الاعتماد على StructureMap?فقط في بدء تشغيل التطبيق ؟ هل هذا يعني أن جميع التطبيقات يجب أن يكون تسليم كل الطريق إلى أسفل من أعلى طبقة في القاع طبقة?

يمكنني استخدام قلعة وندسور/النوية ، ليس لدي أي خبرة في أي شيء آخر ولكن أنا أحب ذلك كثيرا.

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

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

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