أنماط الاستخدام/حالات الاستخدام لـ DI أو متى تبدأ استخدامه
-
28-09-2019 - |
سؤال
لست متأكدًا من حالات الاستخدام التي يجب على المرء استخدام DI في التطبيق. أعلم أن خدمات الحقن مثل PlaceService
أو CalculationService
إلخ يناسبها بشكل جيد للغاية ، لكن إذا قمت أيضًا بإنشاء كائنات النطاق الخاصة بي مع di مثل User
؟ ما إذا كان User
لديه مُنشئ واحد فقط يتطلب اسمًا أوليًا. هل هذا قابل للحل مع DI؟
هل يجب علي استخدام DI لإنشاء مثيلات لواجهات تعيين/قائمة أم أن هذا المبالغة النقية؟
أنا استخدم guice في المقام الأول.
المحلول
القاعدة التي أستخدمها ، بشكل عام ، لصالح حقن التبعية ، باستثناء عندما يمكن بناء الكائن بقيم بدائية بحتة ولا توجد فرصة ضئيلة لاستبدال الكائن بتنفيذ آخر.
ومع ذلك ، بالنسبة لكائنات المجال ، خاصة إذا لم تشكل كائناتك نموذج مجال فقر الدم, ، أي عندما تكون الكائنات مجرد أكياس من getters والمستقبين ، يمكن أن يكون من المفيد أن يكون لديك كائنات يمكن ، على سبيل المثال ، أن تستمر في مخزن البيانات ، وما إلى ذلك. مرهم يمكن أن يكون مزيجا قويا.
لدى Guice حل محدد لنوع المشكلة التي تطرحها كائنات مثل كائن المستخدم الذي يسمى AssistedInject, ، على الرغم من أن الأشياء المماثلة ممكنة أيضًا مع حاويات خفيفة الوزن أخرى أو تستخدم شيئًا ما أنماط البناء أو المحول.
نصائح أخرى
الجواب من قبل IG0774 هو نقطة انطلاق جيدة. بالإضافة إلى ذلك ، أود أن أقدم قاعدة الإبهام هذه:
في مصطلحات تصميم يحركه المجال, ، يجب عليك دي ل خدمات, ، ولكن ليس ل جهات أو كائنات القيمة.
بمعنى آخر ، تتناسب DI بشكل جيد مع كائنات طويلة الأجل من الناحية المفاهيمية التي لا أساس لها والتي عادة ما يكون هناك رقم واحد أو رقم معروف قيد الاستخدام.