سؤال

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

أكبر مشكلة لقد وجدت أنه يمكن أن يكون مربكا المطورين الآخرين الذين يتعلمون فقط ذلك.

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

الأفكار ؟ سيئة التجارب ؟ أو مجرد التوقف عن القلق حول ذلك ؟


[عدل] إعادة:وصف حقن التبعية نفسها

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

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

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

المحلول

لقد اتخذت طعنة في وصف بعض سلبيات في بلوق وظيفة هنا: http://kevin-berridge.blogspot.com/2008/06/ioc-and-di-complexity.html

نصائح أخرى

مشكلة لدي مع دي هي نفس المشكلة لدي مع كوم مع أي رمز التي تبدو شيئا مثل:

i = GetServiceOrInterfaceOrObject(...)

المشكلة هي أن هذا النظام لا يمكن أن يفهم من المدونة.يجب أن يكون هناك وثائق في مكان ما [آخر] أن يعرف ماذا الخدمة/واجهة/object يمكن طلب الخدمة/واجهة/الكائن X.هذا documention يجب أن لا تكون فقط الحفاظ المتاحة بسهولة كما في المصدر.

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

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

أيضا, كنت أشعر أفضل بكثير لو كانت جزء من اللغة التي كنت تستخدم.

لمعلوماتك هناك بسيط جدا وعملي dependecy حقن كجزء من JDK 6.إذا كنت بحاجة خفيفة الوزن ، واضحة حقن التبعية ، ثم استخدامه.

باستخدام ServiceLoader فئة يمكنك طلب الخدمة (أو العديد من عمليات تشغيل الخدمة) بناء على الدرجة:

 package dependecyinjection;  
 import java.util.ServiceLoader;  

 public abstract class FooService {  

     public static FooService getService() {  
         ServiceLoader<FooService> loader = ServiceLoader.load(FooService.class);  

         for (FooService service : loader) {  
             return provider;  
         }  

         throw new Exception ("No service");  
     }  

     public abstract int fooOperation();  

 }  

 package dependecyinjection;  
 public class FooImpl extends FooService {  
     @Override  
     public int fooOperation() {  
         return 2;  
     }  
 }  

كيف ServiceLoader يحدد خدمة تطبيقات التي هي عاد ؟

في مجلد المشروع إنشاء مجلد اسمه META-INF/خدمات وإنشاء ملف اسمه dependencyinjection.FooService.هذا الملف يحتوي على خط لافتا إلى دائرة التنفيذ.في هذه الحالة:dependecyinjection.FooImpl

هذه ليست معروفة على نطاق واسع حتى الآن.

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

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

لي دي يبدو لي أن يكون أكثر ملاءمة أكبر الأنظمة المعقدة -- الصغيرة one-off تطبيقات ، قد يؤدي في التطبيق يجري على هندستها ، أساسا ، بعد أن العمارة تأخذ المزيد من الوقت اللازم لتطوير التمسك أكثر من أي وقت مضى في القيمة التي تقدمها.

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

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

الجانب السلبي الوحيد الذي يمكنني أن أفكر في صغيرة انخفاض أداء طريق ثابت الظاهري المكالمات :)

@Blorgbeard: http://www.martinfowler.com/articles/injection.html هو على الارجح واحدة من أفضل المقالات حول هذا الموضوع

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