2009-11-13 14 views
5

मान लीजिए कि मैं कोड मॉड्यूल के उत्पादन के लक्ष्य के साथ एक एओपी दृष्टिकोण में एक निर्भरता इंजेक्शन ढांचे का उपयोग करना चाहता हूं। साझा इंटरफेस के स्वामित्व के लिए सबसे अच्छा अभ्यास क्या है? स्वामित्व से मेरा मतलब है कि कोड का बॉडी जिसे इंटरफेस का उपयोग करने के लिए संदर्भित किया जाना चाहिए।निर्भरता इंजेक्शन - इंटरफ़ेस का मालिक कौन है?

मेरा पहला अनुमान यह है कि एओपी में आप पहलू द्वारा नामित इंटरफेस की कक्षा लाइब्रेरी को परिभाषित करेंगे। उदाहरण: company.aspect.logging.ILogger। प्रत्येक मॉड्यूल तब इस पुस्तकालय का संदर्भ देगा और आईएलओगर के कार्यान्वयन में शामिल कोई भी कोड होने से बचने के लिए आईएलओगर को भी परिभाषित करेगा।

सर्वोत्तम प्रथाओं?

+0

जो मैं करता हूं उसे सटीक करता हूं (अलग-अलग वर्ग में इंटरफेस होने पर केवल इंटरफेस रखता है)। – Tomas

उत्तर

1

इंटरफेस की कक्षा पुस्तकालय को परिभाषित करना एक अच्छी शुरुआत है। यह आपको लचीलापन में सबसे अच्छा प्रदान करता है क्योंकि आप सभी उपभोक्ताओं और सभी कार्यान्वयनकर्ताओं को एक-दूसरे से स्वतंत्र रूप से स्वतंत्र रूप से बदल सकते हैं।

इस दृष्टिकोण का नुकसान यह है कि अगर आपके इंटरफेस खुद को इस तरह अन्य इंटरफेस निर्यात:

public interface IMyInterface 
{ 
    IMyOtherInterface DoStuff(); 
} 

आप (या आप कर सकते हैं मानचित्रण कोड है कि इंटरफेस से ठोस वर्ग को पॉप्युलेट कर सकते हैं की एक बहुत कुछ लिखने के लिए आवश्यकता हो सकती है औस AutoMapper)।

यदि आपके पास केवल एक उपभोक्ता है लेकिन कई इम्प्लेमेंटर्स हैं, तो आप उपभोक्ता (कभी भी कार्यान्वयनकर्ता के साथ) के साथ इंटरफेस को परिभाषित करके इस मैपिंग में से कुछ को बचा सकते हैं, लेकिन आप कुछ लचीलापन खो देते हैं। हालांकि, आप अभी भी उपभोक्ता के स्वतंत्र रूप से कार्यान्वयनकर्ताओं को बदल सकते हैं, लेकिन दूसरी तरफ नहीं।

+0

मुझे लगता है कि एक निर्भरता-इंजेक्शन ढांचा एक मैपिंग कोड का ख्याल रखेगा, जो Google के गुइस को एक उदाहरण के रूप में ले जाएगा। ऑटोमैपर के परिचय के लिए अतिरिक्त धन्यवाद। मेरे प्रश्न के संबंध में इस टूल के लिए मेरा पहला विचार होगा: 1 - कार्यान्वयन के साथ इंटरफेस को परिभाषित करें 2 - एडाप्टर परत बनाने के लिए ऑटोमैपर का उपयोग करें इस प्रकार तृतीय पक्ष मॉड्यूल के लिए encapsulation और समर्थन प्राप्त करना। बस संगीत ... –

0

यह इंटरफ़ेस करने के उद्देश्य पर निर्भर करता है:

हैं इंटरफेस का उद्देश्य है वैकल्पिक आपूर्तिकर्ताओं का एक सेट और एक ही उपभोक्ता के बीच एक मानक प्रोटोकॉल को परिभाषित करने के लिए, इंटरफ़ेस उपभोक्ता के स्वामित्व में है।

यदि इंटरफ़ेस का उद्देश्य एक एकल आपूर्तिकर्ता और वैकल्पिक उपभोक्ताओं के समूह के बीच मानक प्रोटोकॉल को परिभाषित करता है, तो इंटरफ़ेस आपूर्तिकर्ता के स्वामित्व में है।

यदि इंटरफेस का उद्देश्य वैकल्पिक आपूर्तिकर्ताओं के एक सेट और वैकल्पिक उपभोक्ताओं के एक सेट के बीच मानक प्रोटोकॉल को परिभाषित करता है, तो इंटरफ़ेस स्वयं ही खड़ा होता है।

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

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