سؤال

لقد عبثت مع حولها جوجل Guice من أجل حقن التبعية وبدأت دمج في القائمة تطبيق.جيد جدا حتى الآن.لدي العديد من الفئات التي تحتاج, بجوار تبعيات, سلاسل, DataSources ، إلى آخره.أعرف أن هناك NamedBindings, ولكن أنا حقا لا ترغب في إنشاء الشرح لكل سلسلة بسيط يجب أن تمر إلى المنشئ لكل فئة.ثم هناك شيء يسمى AssistedInject, إنشاء مصنع implementions بالنسبة لي.واو, ولكن لا يزال لدي تعريف واجهة المصنع.هذا حسنا بالنسبة الطبقات التي تحتوي على تبعيات ، ولكن ماذا عن هذا المثال الدرجة:

public class FooBarClass {
    public FooBarClass(String name, String anotherOne) {
        // Some stuff
    }
}

هناك حالات حيث أنا في شك كيفية استخدام Guice أو أكثر عموما ، دي بالطريقة الصحيحة."غالبا ما أسمع:XYZ الإطار الجديد جديد." ولكن هذا ضمنا أن أكون قد خلق كل سبيل المثال مع دي الإطار.

مثيل واحد فقط هو المطلوب

ماذا لو كنت بحاجة فقط مثيل واحد من هذه الفئة ؟ هذه الفئة قد absolutly أي تبعيات بجانب اثنين من السلاسل.التفكير في إغلاق هوك والتي سوف تكون instanciated مرة واحدة فقط مرت على JVM بلدي إغلاق هوك.يجب إنشاء هذا المثال مع Guice?هذه تبدو غبية جدا بالنسبة لي, لأنه لا يوجد شيء حقن, ولكن يجب علي أن أكتب مصنع واجهة لتمرير توجيه المعلمات إلى إنشاء واجهة بلدي FooBarClass استخدام دي.

مثيلات متعددة مطلوبة

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

إذا كيف أنا من المفترض أن تستخدم دي و/أو Guice?

شكرا جزيلا!

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

المحلول

يمكن أن يساعد على تقسيم تبعيات من البيانات.

  • تبعيات غالبا ما تكون الخدمات:قواعد البيانات, الساعات, و RPC بذرة.بالإضافة إلى كل من رمز التطبيق الطبقات على هذه: UserAuthenticator, PaymentHandler, ، EmailGateway.
  • البيانات فقط:a Date, ، Map<String,InetAddress> أو حتى Customer.هذه هي بسيطة في الذاكرة كائنات المجال.

دي هي بطبيعة الحال الأنسب لهذه التبعية الجانب من الأمور.يجب عليك الاستمرار في استخدام new البيانات الخاصة بك نموذج الطبقات.

نصائح أخرى

إذا كنت تريد إنشاء مثيلات متعددة مثل العملاء من الأفراد ، فإنه لا معنى لحقن لهم.ما يجعل الشعور هو خلق CustomerFactory التي قد تكون @المفرد النطاق التي يمكن أن تخلق العملاء الحالات مع جميع التبعيات.

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

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