سؤال

يقوم فريقي بالبحث في أطر حقن التبعية وتحاول أن تقرر بين استخدام Google-Guice و Picocontainer.

نحن نبحث عن عدة أشياء في إطارنا:

  1. بصمة رمز صغيرة - ما أقصده بصمة رمز صغير أمر لا نريد أن يكون لديك القمامة رمز حقن التبعية في كل مكان في قاعدة التعليمات البرمجية لدينا. إذا كنا بحاجة إلى إعادة الإندمج على الطريق، نريد أن تكون سهلة قدر الإمكان.
  2. الأداء - مقدار العلامة العامة التي يقوم بها كل إطار عند إنشاء وكائنات حقنها؟
  3. سهولة الاستخدام - هل هناك منحنى تعليم كبير؟ هل علينا أن نكتب التلال من التعليمات البرمجية للحصول على شيء عمل بسيط؟ نريد أن يكون لديك القليل من التكوين قدر الإمكان.
  4. حجم المجتمع - المجتمعات الكبيرة عادة ما يعني أن المشروع سيستمر الحفاظ عليه. نحن لا نريد استخدام إطار عمل وإصلاح الأخطاء الخاصة بنا؛) أيضا أي أسئلة لدينا على طول الطريق يمكن الإجابة عليها (نأمل) الإجابة بواسطة مطور الإطار / مجتمع المستخدمين.

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

إخلاء المسئولية: أنا جديد إلى حد ما على حقن التبعية معذر جدا من NOOB-NESS إذا سألت سؤالا غير مناسب بهذه المناقشة.

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

المحلول

قد ترغب في تضمين الربيع في قائمة أطر حقن التبعية التي تفكر فيها. فيما يلي بعض الإجابات لأسئلتك:

اقتران إلى الإطار

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

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

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

أداء

بيكو - أنا لست على دراية للغاية بخصائص سرعة بيكو

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

الخريف - الربيع يمكن أن يكون بطيئا. كان هناك عمل لجعله بشكل أسرع واستخدام مكتبة Javaconfig يجب أن تسرع الأمور.

سهولة الاستعمال

بيكو - سهل التكوين. بيكو يمكن أن تجعل بعض قرارات AutoWire بالنسبة لك. ليس من الواضح كيف تقزم المقاييس إلى مشاريع كبيرة جدا.

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

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

حجم المجتمع

بيكو - صغير

الغيار - متوسط

الخريف - كبير

خبرة

بيكو - ليس لدي الكثير من الخبرة مع بيكو، لكنه ليس إطارا واسعا على نطاق واسع، لذا سيكون من الصعب العثور على الموارد.

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

الخريف - الربيع عادة ما يكون خياري الافتراضي. ومع ذلك، يمكن أن تصبح XML مرهقة ومضايقات التباطؤ الناتجة. كثيرا ما ينتهي بك الأمر باستخدام مزيج من حقن التبعية المصنوعة يدويا. عندما تحتاج فعلا إلى التكوين المستند إلى XML، ربيع XML جيد جدا. وضع الربيع أيضا الكثير من الجهد في جعل أطر أخرى أكثر ودية يمكن أن تكون مفيدة لأنها غالبا ما تستخدم أفضل الممارسات عند القيام بذلك (JMS، Orm، OXM، MVC، إلخ).

مراجع

نصائح أخرى

الجواب الذي طرحته Jamie.McCrindle هو في الواقع جيد جدا، لكنني غادرت في حيرة من أمرها لماذا الربيع هو الخيار الافتراضي عندما يكون من الواضح جدا أن البدائل المتفوقة (كل من بيكو والجدار) المتاحة. وصلت شعبية IMO الربيع إلى ذروتها والآن أنها تعيش حاليا من الضجيج الذي تم إنشاؤه (جنبا إلى جنب مع جميع مشاريع الربيع "لي أيضا" الربيع التي تتطلع إلى ركوب Bandwagon Spring).

ميزة الربيع الوحيدة الوحيدة هي حجم المجتمع (وبصراحة تماما، نظرا للحجم والتعقيد، فمن الضروري)، ولكن بيكو والوجود لا يحتاج مجتمع ضخم لأن حلهم أكثر نظافة وأكثر تنظيما وأكثر أناقة. بيكو يبدو أكثر مرونة من الخيار (يمكنك استخدام التعليقات التوضيحية في بيكو، أم لا - إنها فعالة للغاية).(تحرير: يعني أن أقول إنها مرنة للغاية، وليس أنها ليست فعالة أيضا.)

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

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

ملاحظة: هذا أكثر من التعليق / التشدق من إجابة

picocontainer كبيرة. سأعود إليه إذا كان فقط إصلاح مواقع الويب الخاصة بهم. انها حقا مربكة الآن:

  • http://picocontainer.com. وهي الأحدث، لكن العديد من الصفحات لديها مشاكل تنسيق وبعض الصفحات لا تعمل على الإطلاق. يبدو أن الصفحات تم تحويلها تلقائيا من المحتوى الأقدم.
  • http://picocontainer.codehaus.org/ التي تبدو متجمدة في الوقت المناسب في الإصدار 2.10.2 - سيكون حقا لطيف إذا قالت الصفحات شيئا مثل "مهلا، فأنت تبحث في موقع ويب قديم!"
  • http://docs.codehaus.org/display/peco/home. - التقاء Wiki أن الوثائق V 1.x، ولكن لا يقول ذلك في أي مكان على الصفحات!

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

تحديث: لقد نشرت تعليقا على أهل حاويات بيكو وأصلىوا بعض التحسينات على موقع الويب. أفضل بكثير الآن!

إنه سؤال قديم ولكن اليوم يمكنك التفكير خنجر (https://github.com/square/Dagger.) في مشروع تطبيق Android الخاص بك. خنجر لا يوجد رمز توليد في وقت التجميع. لذلك يمكنك الحصول على وقت بدء التشغيل الأقصر واستخدام الذاكرة أقل عند وقت التنفيذ.

إذا كنت بعد حاوية DI الحد الأدنى، يمكنك التحقق من ريشة. وبعد وظيفة Vanilla JSR-330 DI فقط، ولكن جيدة جدا من حيث البصمة (16K، لا توجد تبعيات) والأداء. يعمل على الروبوت.

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

من حيث التطهر، فإن المشكلة الرئيسية هي شرط حاوية واستخدام ملف meta-inf / beans.xml فارغ نسبيا (مطلوب للإشارة إلى أن الجرة تستخدم CDI) واستخدام التعليقات التوضيحية (على الرغم من أنها معيار في

حاوية CDI خفيفة الوزن أنا أستخدمها لمشاريع الخاصة بي هي Apache Open Web Beans. على الرغم من أنه استغرق الأمر بعض الوقت لمعرفة كيفية إنشاء تطبيق بسيط (على عكس بيكو) الذي يشبه هذا.

public static void main(final String[] args) {
    final ContainerLifecycle lifecycle = WebBeansContext.currentInstance()
            .getService(ContainerLifecycle.class);
    lifecycle.startApplication(null);

    final BeanManager beanManager = lifecycle.getBeanManager();
    // replace Tester with your start up class
    final Bean<?> bean = beanManager.getBeans(Tester.class).iterator()
            .next();

    final Tester b = (Tester) lifecycle.getBeanManager().getReference(bean,
            Tester.class, beanManager.createCreationalContext(bean));
    b.doInit();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top