7

जब कोड लिखने हम वस्तुओं के दो बड़े समूह की पहचान करने में सक्षम होना चाहिए इंजेक्शन:निर्भरता इंजेक्शन, एक newable (इकाई) में एक "इंजेक्शन" वस्तु (सेवा)

  • Injectables
  • Newables

http://www.loosecouplings.com/2011/01/how-to-write-testable-code-overview.html

http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/

  • इंजेक्शन वस्तुओं वस्तुओं (सेवा) है कि उनके निर्माताओं में निर्भरता इन निर्भरताओं आम तौर पर एक आईओसी कंटेनर का उपयोग कर हल कर रहे हैं बेनकाब कर रहे हैं, इन वस्तुओं केवल अपने निर्माताओं के अन्य इंजेक्शन के लिए पूछ सकते

  • Newable ऑब्जेक्ट भी बेनकाब कर रहे हैं उनके कंस्ट्रक्टर्स लेकिन newables में निर्भरता केवल अन्य newable वस्तुओं (संस्थाओं, मूल्य वस्तुओं) के लिए पूछ सकते हैं, newable वस्तुओं की एक और विशेषता है कि वे एक इंजेक्शन वस्तु

के लिए एक संदर्भ पकड़ नहीं होना चाहिए लेकिन, हम अक्सर जब कोड लिखने एक सर्व "इंजेक्ट" करने की जरूरत है बर्फ (इंजेक्शन योग्य) एक इकाई में (नया)

मैं सोच रहा हूं कि एक नई वस्तु में सेवा निर्भरता को उजागर करना शायद इसे विधि स्तर पर बेहतर कर रहा है लेकिन ऐसा करने के लिए बहुत सारे काम की तरह लगता है .... बस निर्भरता हर बार एक विधि कहा जाता है को हल करने के बारे में सोच .... अच्छी तरह से इस बदबू आ रही है जैसे हम सेवा लोकेटर विरोधी पैटर्न

तरह से मैं इस समाधान कर लिया है का उपयोग करना होगा है:

  • बनाएं निर्भरता को उजागर करने वाली विधि वाला एक इंटरफ़ेस (सेवा इस विधि में उपयोग की जाएगी)

  • इंटरफेस के लिए एक एक्सटेंशन विधि बनाएँ और एक अलग नाम स्थान में रखें, शायद एक और विधानसभा में, और सिर्फ मूल विधि निर्भरता को हल करने के लिए एक सेवा लोकेटर

का उपयोग कर इस हम कर के लिए कॉल लपेट हमारे नए अक्षरों में आसानी से सेवाओं का उपयोग करने की क्षमता के साथ नई और इंजेक्शन योग्य वस्तुओं के बीच लगातार पृथक्करण है

  • आपको क्या लगता है?
  • एक विस्तार विधि में सेवा लोकेटर का उपयोग करना एक बुरा अभ्यास माना जाता है?
  • आप एक्सटेंशन विधि कॉल का यूनिट-टेस्ट कैसे करेंगे?
+1

निकटता से संबंधित: http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve- निर्भरता-for-entities-business-objec – Steven

+0

Thx यह लिंक वास्तव में उपयोगी था – Jupaol

उत्तर

2

लेकिन जब कोड लिखने, हम अक्सर एक इकाई (newable) में "इंजेक्षन" के लिए एक सेवा (इंजेक्शन) की जरूरत है

अगर आप की जरूरत को खोजने के केस नहीं है ऐसा करें तो कुछ कार्यक्षमता है जो इकाई में मौजूद है जो एक सेवा में होनी चाहिए।

मान लें कि आपका नया ShoppingCart है और आपका इंजेक्शन योग्य डेटाबेस repository है। आप यह करने में सक्षम होना चाहते हैं:

// somehow cart already got the repository 
cart.save(); 

ठीक है, आप इसे गलत कर रहे हैं। इसके बजाय आप चीजों को चारों ओर लौटते हैं और क्या करने की जरूरत:

respository.save(cart); 

आप जब आप ऐसा करने की जरूरत महसूस की स्थिति प्रदान कर सकता है, तो हम उस स्थिति की बारीकियों पर चर्चा कर सकते हैं।