سؤال

وقادمة من C ++ الخلفية لا بد لي من السيطرة على تعقيد جافا العالم وأطرها. أبحث في إطار الربيع للDI أنا تجد الصعب أن نصدق أن لدي لجعل كل وظيفة واضعة التي ستخضع لDI الجمهور. لا هذا الشرط كسر مبدأ إخفاء المعلومات؟

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

ما أنا في عداد المفقودين هنا؟

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

المحلول

إذا <م> الرمز إلى واجهات ، تحتاج فقط لكشف واضعي على التنفيذ. كما كنت حقن اجهات إلى أجزاء أخرى من النظام، فإنها لا يمكن الوصول إلى تفاصيل التنفيذ أو الدولة من الكائنات.

نصائح أخرى

وأنا أتفق مع وجهة نظرك - لهذا السبب انا افضل حقن المنشئ.

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

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

إذا كنت تستخدم الشروح الربيع (Autowired) يمكنك DI أعضاء من القطاع الخاص.

إذا كنت اذهب للاقتران فضفاضة و(وحدة) قابلية الاختبار في وجهة نظري الينابيع DI تندلع المعلومات التي لا ينبغي أن تكون مخفية.

وكان في الأساس نفس السؤال هنا:

تغليف في سن الأطر

واعتقد ان الجواب قد يكون حقن المنشئ. تعريض الممتلكات الخاصة بك مع واضعي يجعل من الصعب حقا أن ecapsulate أي شيء والحفاظ على الدولة وجوه جيدة.

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

<bean id="runnable" class="MyClass">
   <constructor-arg>
     <bean class="MyClass$Builder">
       <property name="p1" value="p1Value"/>
       <property name="p2" value="p2Value"/>
       <property name="p3" value="p3Value"/>
       <property name="p4" value="p4Value"/>
     </bean>
   </constructor-arg>
</bean>

ورمز الدرجة:

public class MyClass {
   private final String p1;
   private final String p2;
   private final String p3;
   private final String p4;
   public MyClass(Builder builder) {
      this.p1 = builder.p1;
      this.p2 = builder.p2;
      this.p3 = builder.p3;
      this.p4 = builder.p4;
   }

   ...

   public static class Builder {
      private String p1;
      private String p2;
      private String p3;
      private String p4;
      public void setP1(String p1) {
         this.p1 = p1;
      }
      ... and so on
   }
}

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

وشخصيا، لا أعتقد أن استخدام حقن منشئ يساعد على ذلك، أيضا، لأنه أكثر المفاهيمي.

وسوف يكون لي للتحقق منAutowire، ثو.

وTJ

وأردت فقط أن أذكر أنني قد (عن غير قصد) نشر نسخة أكثر عمومية في هذه المسألة، وأنه لديه بعض الأفكار أخرى في هذه المسألة: <لأ href = "https://stackoverflow.com/questions/1005473/ لا بد من الاعتماد على الحقن ورودها-في-ث-حساب-من-التغليف "> يجب الاعتماد على حقن تأتي على حساب تغليف؟

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

والربيع يوفر فقط الطريق الذي يمكن القيام به من خلال رمز وانتقلت هذه السيطرة من الرمز (IOC).

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

public void setAge(int age) {
 if ( age < 0 ) {
   throw new AppException("invalid age!");
 }
 this.age=age;
}

وهذا هو سبب آخر أنا أفضل Guice.) كلا Guice والربيع تنفيذ JSR 330 DI المواصفات ولكن مع Guice أستطيع أن يحقن بلدي حقول المثال خاصة مع عدم وجود اضعي وأنا حقا لا يروق حقن منشئ كما بدا من الصعب ريفاكتور. بل هو أيضا مجرد الكثير أكثر الكتابة عن القيمة ليس كثيرا في رأيي المتواضع.

وبعد، عميد

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