2012-08-07 15 views
13

रणनीति पैटर्न अलग-अलग निर्भरता इंजेक्शन कैसे भिन्न है?रणनीति पैटर्न बनाम निर्भरता इंजेक्शन

यानी नीचे

क्या आप रणनीति पैटर्न के साथ क्या कर सकते हैं:

class Foo{ 
    private readonly ISortAlgo _sortAlgo; 

    public Foo(ISortAlgo sortAlgo) 
    { 
    _sortAlgo = sortAlgo; 
    } 

    public void Sort() 
    { 
    _sortAlgo.sort(); 
    } 

} 

डि के साथ भी ऐसा ही कर सकते हैं, अनिवार्य रूप से आप निर्माता, सेटर, इंटरफ़ेस आदि इंजेक्शन हो सकता है। और यह रणनीति पैटर्न के समान प्रभाव देगा। मुझे पता है मुझे नहीं बहुत अंतर दिखाई डि भी इस तरह के ढीला संयोजन, testability, तारों आदि

कार्यान्वयन के संदर्भ में के रूप में अन्य सिद्धांतों, के सेट कर दिया जाता है कि कर रहा हूँ।

क्या रणनीति पैटर्न और डि के बीच का अंतर है?

+0

वर्तमान उत्तर विशेष रूप से संतोषजनक नहीं हैं। बेहतर उत्तर उन मतभेदों पर व्यावहारिक रूप से ध्यान केंद्रित करेंगे जिनमें परिवर्तनीय व्यवहार रन टाइम पर इंजेक्शन दिए जाते हैं। – Mario

उत्तर

14

पहले, निर्भरता इंजेक्शन सुई विधि के रूप में न केवल निर्माता इंजेक्शन, लेकिन यह भी संपत्ति, विधि इंजेक्शन और परिवेश संदर्भ है।

दूसरा, stategy, व्यवहार को परिभाषित करता है तो ग्राहक विशेष एक है कि अपनी जरूरतों पर से मेल खाता है चुन सकते हैं। जबकि निर्भरता इंजेक्शन बाहरी निर्भरताओं के अमूर्तता के साथ काम करता है।

+1

+1। * व्यवहार * का उल्लेख करने के लिए। एक अच्छा सारांश के लिए –

+1

+1। मुझे लगता है कि कुछ भ्रम इस तथ्य के कारण है कि दो डीपी एक ही तंत्र का उपयोग करते हैं लेकिन अलग-अलग दायरे और इरादे रखते हैं। –

12

Strategy pattern किसी ऑब्जेक्ट के व्यवहार (यानी इसके एल्गोरिदम) को रनटाइम पर चुना जा सकता है, जहां Dependency injection हार्ड-कोडेड निर्भरताओं को हटाने की अनुमति देता है।

इसलिए वे प्रतियोगियों नहीं हैं। उनके कार्यान्वयन समान हो सकते हैं, हालांकि, उनका लक्ष्य अलग है।

+1

"एक विधि को पारित किया गया, लेकिन इसे DI माना नहीं जाएगा"। सुधार: DI कई रूपों में आता है। कन्स्ट्रक्टर सबसे आम रूप है (और अक्सर सबसे अच्छा विकल्प), लेकिन विधि इंजेक्शन निर्भरता इंजेक्शन का एक रूप भी है। – Steven

+0

क्या आप इसे डीआई मानने पर भी विचार करेंगे यदि यह कुछ क्रियाएं करने के लिए विधि में पारित किया गया था (जिस मामले में मुझे दिमाग था) और कक्षा शुरू करने के लिए नहीं? –

+0

निर्भरता विधि में इंजेक्शन दी गई है, इसलिए हाँ, यह निर्भरता इंजेक्शन का एक रूप है। हालांकि, विधि इंजेक्शन आम तौर पर निर्भरताओं को इंजेक्शन देने का एक बहुत ही नाजुक तरीका है, क्योंकि निर्भरता को अनुबंध का हिस्सा होना पड़ता है, और कॉल स्टैक को विधिबद्ध करने के तरीके से पद्धति से पद्धति से विधि तक निर्भरता पारित करना बोझिल होगा। – Steven

6

रणनीति आप एक वस्तु का व्यवहार बदलने के लिए अनुमति देता है। डी एक डिजाइन पैटर्न है जो आपको अवशोषण पर निर्भर होने की अनुमति देता है।

4

निर्भरता इंजेक्शन एक पैटर्न है कि मदद से आप निर्माण प्रपत्र तर्क जो परीक्षण और प्रणाली तानाना के लिए अच्छा है विभाजित है। इसका उपयोग उस स्थान पर भी किया जा सकता है जहां अन्य पैटर फिट होते हैं। सिंगलटन।

रणनीति पैटर्न एक अलग समस्या का हल। यह पॉलीमोर्फिज्म के माध्यम से ओओपी में एल्गोरिदम चुनने के लिए रनटाइम देता है।

निश्चित रूप से, वे एक साथ काम कर सकते हैं।