سؤال

هل يحتمل أن يسبب حقن التبعية النفقات العامة الكبيرة؟

أتصور ذلك ، خاصةً إذا كان المحلول يسمى عدة مرات (وهو ما يحتمل أن يبحث في أمثلة نمط)؟ أم أفكر خطأ؟ لسوء الحظ ، لا يمكنني اختبار نفسي لأنني لم أستخدمها أبدًا ولكن خططت لاستخدامها.

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

المحلول

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

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

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

باختصار ، لن أقلق بشأن ذلك.

نصائح أخرى

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

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

http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html لبعض اختبارات الأداء. كان كل اختبار يعمل 1000000 إبداعات.

لاحظ أن المعيار يعرض دقة Singleton ودقة عابرة: A Singleton هل تقوم بتسجيل مثيل لفئة EG (باستخدام الوحدة):

container.RegisterInstance<IMyType>(new ConcreteMyType());

ويتم إرجاع هذه الحالة في كل مرة (وهو سريع جدًا).

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

container.RegisterType<IMyType, ConcreteMyType>();

هذا يستغرق مزيدًا من الوقت في إرجاع المفرد.

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

حقن التبعية في حد ذاته هو مجرد عدم توجيه بسيط ، لذلك هناك النفقات العامة ولكنها بسيطة جدا حقا. إن مطابقة نمط وقت التشغيل وحلها هو شيء آخر (ولكن بينما يستخدم في كثير من الأحيان مع حقن التبعية ، فإنه ليس كما لو كان di حفز مثل الإضافات ؛-).

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

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

الكود العلوي مقابل الاختبار والقابل للصيانة ... اخترت رمزًا قابلاً للاختبار وقابل للصيانة (يمكنك دائمًا شراء كمبيوتر أسرع)

=)

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