6

के बीच अंतर को समझता हूं, जो 3 मुहावरों के बीच अंतर के बारे में कई पोस्ट पढ़ता है। लेकिन अधिक उलझन में आया, तो मैं इस आलेख में भाग गया: http://martinfowler.com/articles/injection.htmlverifiying मैं आईओसी, आईओसी कंटेनर, डी और सेवा लोकेटर

बस यह देखना चाहता है कि मुझे यह अधिकार मिला है या नहीं। कृपया मुझे सुधारें अगर मैं गलत हूं। कृपया मुझे सुधार और परिवर्धन के बारे में सूचित:

ioc- एक सेवा का उपयोग करता है के कार्यान्वयन से एक आवेदन decoupling की अवधारणा है। आवेदन में सेवा के लिए एक रेफरी है और ठोस सेवा को कम करने का प्रभारी नहीं है।

कम से कम दो तरह से इतना हासिल करने के लिए कर रहे हैं:

  1. डि - ठोस सेवा एक ctor परम के रूप में इंजेक्ट किया जाता है/एक सेटर/फेंक इंटरफ़ेस इंजेक्शन (फेंक क्या उत्तरार्द्ध मतलब है?)

  2. सर्विसलोकेटर - एक ऐसा घटक है जो एप्लिकेशन को आवश्यक सभी ठोस सेवाओं को जानता है। आवेदन लोकेटर से कंक्रीट सेवा के लिए स्पष्ट रूप से पूछता है।

* आईओसी कंटेनर वास्तव में एक नियंत्रण 'कारखाना ("प्रदाता") है।

मुझे लेख में "कब पसंद करना (1) या (2)" भाग से थोड़ा उलझन मिला। कोई व्यक्ति किसी आम आदमी शब्दों में अपने अनुभव से बता सकता है?

"सेवा लोकेटर के पास इसके अधिक सरल व्यवहार के कारण थोड़ा सा बढ़त है। हालांकि यदि आप कई अनुप्रयोगों में कक्षाओं का निर्माण कर रहे हैं तो निर्भरता इंजेक्शन बेहतर विकल्प है।" -> लोकेटर को और अधिक सरल कैसे है? क्योंकि यह विधि आमंत्रण का स्पष्ट रूप से उपयोग करता है? कई अनुप्रयोग होने पर DI का उपयोग करना बेहतर होता है?

+1

शायद आप इस लेख के उस हिस्से में विशिष्ट विचारों को हाइलाइट कर सकते हैं जो आपको भ्रमित लग रहा है? – prasopes

+0

"सेवा लोकेटर के पास इसके अधिक सरल व्यवहार के कारण थोड़ा सा बढ़त है। हालांकि यदि आप कई अनुप्रयोगों में कक्षाओं का निर्माण कर रहे हैं तो निर्भरता इंजेक्शन एक बेहतर विकल्प है।" -> लोकेटर को और अधिक सरल कैसे है? क्योंकि यह विधि आमंत्रण का स्पष्ट रूप से उपयोग करता है? कई अनुप्रयोग होने पर DI का उपयोग करना बेहतर होता है? –

+1

संबंधित: http://stackoverflow.com/questions/6766056/dip-vs-di-vs-ioc –

उत्तर

4

आईओसी एक सेवा के कार्यान्वयन से आवेदन को डीकॉप्लिंग करने की अवधारणा है।

यह सच है कि आईओसी कार्यान्वयन से डिकूप्लिंग इंटरफेस के साथ हाथ में है, लेकिन मैं इसे एक और सामान्य सिद्धांत के रूप में देखता हूं। This SO answer अवधारणा का एक बहुत अच्छा स्पष्टीकरण देता है।
1) डि
2) ServiceLocator

मैं यह नहीं कहूंगा कि सेवा लोकेटर पैटर्न नियंत्रण के उलट का एक उदाहरण है:

इसलिए हासिल करने के लिए कम से कम दो तरह से कर रहे हैं। काफी विपरीत - जब आप सेवा लोकेटर का उपयोग कर रहे हैं, तो आप आवश्यक निर्भरताओं को सक्रिय तरीके से प्राप्त कर रहे हैं, कोई भी आपके लिए यह नहीं करता है (DI के विपरीत, जहां कंटेनर आपके लिए निर्भरता को संभालता है, आपको बस इसे देना होगा ऐसा करने की संभावना - एक सेटर, एक कन्स्ट्रक्टर पैरामीटर या इंजेक्शन इंटरफ़ेस की विधि को कार्यान्वित करके)।

लोकेटर अधिक सरल कैसे है? क्योंकि यह विधि आमंत्रण का स्पष्ट रूप से उपयोग करता है?

मुझे लगता है कि मार्टिन Fowler आईओसी के सामान्य विचार है कि कोड कठिन समझने के लिए अगर आप पहले इस्तेमाल आईओसी/डि अवधारणा कभी नहीं देखा है कर सकते हैं करने के लिए बात कर रहा है। दूसरी ओर, कुछ निर्भरताओं को प्राप्त करने के लिए सेवा लोकेटर का उपयोग करने वाला कोड पहले मुठभेड़ पर समझना आसान हो सकता है।

कई अनुप्रयोग होने पर DI का उपयोग करना बेहतर होता है?

आप एक घटक है कि पुन: प्रयोज्य माना जाता है बना रहे हैं, डि का लाभ यह है अपने घटक म्यूचुअल फंड के उदाहरण में मूल निर्भरता की तुलना में और (कुछ भी पर निर्भर नहीं है है, MovieLister केवल पर निर्भर करता है DI का उपयोग करते समय मूवीफाइंडर इंटरफ़ेस)। इसके अलावा, दूसरों के लिए आपके घटक का उपयोग करना बहुत आसान है - केवल आपके द्वारा प्रदत्त डीआई के माध्यम से निर्भरताओं को पारित करना होगा।

सेवा लोकेटर का उपयोग करते समय, आप सेवा लोकेटर के इंटरफ़ेस पर निर्भरता भी जोड़ते हैं। लोकेटर के लिए पृथक इंटरफ़ेस के साथ, यह कोई समस्या नहीं हो सकती है। लेकिन यह भी कठिन हो सकता है अपने घटक के उपयोगकर्ताओं, अपने घटक के निर्भरता को पूरा करने के लिए के रूप में म्यूचुअल फंड लिखते हैं:

अंतर अगर भरती एक घटक है कि मैं एक आवेदन है कि अन्य लोगों को कर रहे हैं करने के लिए उपलब्ध कराने के कर रहा हूँ है आता है लिख रहे हैं। इस मामले में मैं सेवा locators के एपीआई के बारे में ज्यादा नहीं जानता कि मेरे ग्राहक उपयोग करने जा रहे हैं। प्रत्येक ग्राहक के पास अपने स्वयं के असंगत सेवा लोकेटर हो सकते हैं।

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