6

मैंने हाल ही में एक ईंट की दीवार मारा है जब मैंने उस परियोजना में निनजेक्ट में एक शॉट दिया था जिस पर मैं काम कर रहा हूं।स्टेटिक निर्भरता इंजेक्शन फैक्ट्री, सही या गलत?

मैं सभी प्रकार के प्रश्नों के माध्यम से चला गया हूं, जो निर्भरता इंजेक्शन के पक्ष में व्यवस्थित रूप से मेरे डिजाइन और वास्तुकला का अनुरोध करता है।

  1. Is this right to inject the container/kernel to the main application presenter?

  2. How to configure Ninject to use along with NHibernate in WinForms?

  3. Conditional dependency injection binding only when property not null

  4. What did I get wrong, DI or Design, and how should I go about it?

घंटे के बाद, और घंटे, और समुद्र के घंटे रोचिंग, मैं जस्टिन एथेरेज से उस लेख में आया जो अपनी स्थिर डिफैक्ट्री कक्षा की बात करता है।

अब मुझे आश्चर्य है, जिससे यह नहीं है चीजों को जादू की तरह काम करते हैं एक स्थिर डि कारखाने का उपयोग कर?

मैं वास्तविक दुनिया के अनुप्रयोग में स्थिर डी फैक्ट्री का उपयोग करने के पेशेवरों और विपक्ष को सुनना चाहता हूं।

इसके अलावा, आईओसी और डीआई समान हैं, या वे बहुत समान हैं, हालांकि कुछ अंतर हैं?

उत्तर

7

एक static DI Factory is a Service Locator, और एक Service Locator is an anti-pattern क्योंकि इसके बारे में अपने कोड यह कारण करने के लिए मुश्किल कर देगा:

  • यह कैप्सूलीकरण टूट जाता है।
  • यह Interface Segregation Principle का उल्लंघन करता है।
  • Single Responsibility Principle के उल्लंघन को स्थानांतरित करना अधिक कठिन बनाता है।
  • यह ऑब्जेक्ट संरचना को और अधिक कठिन बनाता है, क्योंकि यह सेवा लोकेटर से संरचना संदर्भ छुपाता है।
  • यह Hollywood Principle तोड़ता है।

सेवा लोकेटर का ही लाभ है कि यह थोड़ाeasier to understand than Dependency Injection है। हालांकि, डी once you get over a few conceptual hurdles को समझना मुश्किल नहीं है।

आईओसी और डी के बीच संबंध DI is a special case of IoC है।

+0

क्या होगा यदि अनुप्रयोग स्टार्टअप पर कुछ प्रकारों को तत्काल नहीं किया जा सकता है, क्योंकि उन्हें उपयोगकर्ता प्रमाण-पत्रों को तुरंत चालू करने की आवश्यकता है? उदाहरण के लिए, 'NHibernante.ISessionFactory' ऐसी समस्या है क्योंकि इसे उचित कनेक्शन स्ट्रिंग के बिना तत्काल नहीं किया जा सकता है, और एक बार बनाया गया है, यह किसी को इसकी कनेक्शन स्ट्रिंग को बदलने नहीं देगा। एक कामकाज के रूप में, कोई एक 'आईडीबीकनेक्शन' की आपूर्ति कर सकता है, और दूसरे स्तर के कैश को खो देता है जिसमें 'आईसेशन' जीवन चक्र में किसी ऑब्जेक्ट का निशान होता है। फिर किसी को उपयोगकर्ता को अपने प्रमाण-पत्र प्रदान करने की आवश्यकता होगी, और अब 'ISessionFactory' निर्भरता अब कोई समस्या नहीं है। –

+0

क्या यह एक 'सार फैक्ट्री' होगा जो नए प्रकारों को पंजीकृत करने की अनुमति देगा? आप इसके बारे में कैसे जाएंगे? –

+1

यदि आप रन-टाइम पर उप-ग्राफ़ को हल नहीं कर सकते हैं, तो आप हमेशा संकेत की एक और परत जोड़ सकते हैं। एक सार फैक्टरी एक विकल्प होगा। [सार फैक्ट्री को लागू करने] के बारे में अधिक जानकारी यहां दी गई है (http://blog.ploeh.dk/2012/03/15/ImplementinganAbstractFactory)। –

संबंधित मुद्दे