2010-09-08 13 views
6

वर्तमान (सी #) प्रोजेक्ट में हमारे पास एक तृतीय पक्ष असेंबली है जिसमें एक गैर-इंटरफेस कनेक्शन ऑब्जेक्ट होता है। आईओसी, आदि का उपयोग करके हम इस कोड को हमारे कोड में इंजेक्ट कर सकते हैं, लेकिन यह यूनिट टेस्ट आदि के लिए एक दुःस्वप्न साबित कर रहा है। हम MoQ का उपयोग हमारे मॉकिंग फ्रेमवर्क के रूप में कर रहे हैं, इसलिए आदर्श रूप से काम करने के लिए इंटरफ़ेस के साथ ऐसा कर सकता है और हम नहीं चाहते हैं Moles जैसे कुछ का उपयोग करने के मार्ग को नीचे जाने के लिए क्योंकि हम प्रौद्योगिकियों को कम करना चाहते हैं।यह कौन सा डिजाइन पैटर्न है?

यदि हम तृतीय पक्ष कनेक्शन ऑब्जेक्ट की वांछित कार्यक्षमता की नकल करने के लिए एक इंटरफ़ेस बनाते हैं और फिर उस इंटरफ़ेस का एक कार्यान्वयनकर्ता बनाते हैं जिसमें तृतीय पक्ष ऑब्जेक्ट का उदाहरण होता है तो यह हमारे कोड को इंटरफ़ेस से बाहर करने और हमारे आईओसी दोनों को काम करने की अनुमति देगा और यूनिट परीक्षण खुश होंगे। हालांकि एक चर्चा में हम सर्कल में चारों ओर चले गए हैं कि यह वास्तव में कौन सा डिजाइन पैटर्न है!

तो सवाल यह है, "स्थिति एक नीचे ऊपर वर्णित और कोड में सचित्र है:"

  1. Adapter के रूप में हम मौजूदा कार्यक्षमता के लिए एक आवरण प्रदान कर रहे हैं।
  2. Proxy क्योंकि हम किसी और चीज़ के लिए इंटरफ़ेस साबित कर रहे हैं।
  3. Facade क्योंकि प्रक्रिया के हिस्से के रूप में हम एक बड़ी वस्तु के लिए एक सरल इंटरफेस प्रदान करेंगे।

 

namespace ExampleCode 
{ 
    public interface IConnector 
    { 
     void Open(); 
    } 

    public class ConnectorWrapper : IConnector 
    { 
     ThirdPartyConnector _instance; 

     public ConnectorWrapper(ThirdPartyConnector instance) 
     { 
      _instance = instance; 
     } 

     void Open() 
     { 
     _instance.Open(); 
     } 
    } 
} 

उत्तर

1

यह निश्चित रूप से एक मुखौटा है। मैं ओवर-इंजीनियर एपीआई को सरल बनाने के लिए हर समय ऐसा करता हूं।

+0

क्या आप कहेंगे कि यह सिर्फ एक मुखौटा है, या यह एक अनुकूलक या प्रॉक्सी है जो एक मुखौटा भी है? –

+0

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

+0

कोई ऐसा मामला नहीं है, एक इंटरफ़ेस का परिचय यूनिट परीक्षणों में मॉकिंग करने के लिए है, तीसरी पार्टी ऑब्जेक्ट किसी भी इंटरफ़ेस को स्वयं लागू नहीं करता है। आपकी टिप्पणियों के लिए आभार। –

2

त्वरित उत्तर, मुखौटा।

मेरी GoF

एडाप्टर से:

एक और इंटरफ़ेस ग्राहकों की उम्मीद में एक वर्ग के इंटरफ़ेस बदलें। एडाप्टर कक्षाओं को एक साथ काम करने देता है जो अन्यथा असंगत इंटरफेस के कारण नहीं हो सकता है।

इंटरऑपरेबिलिटी कारण के लिए ऐसा नहीं लगता है, यहां कोई नहीं कहेंगे।

प्रॉक्सी

किसी अन्य वस्तु की इस तक पहुंच को नियंत्रित करने के लिए एक किराए या प्लेसहोल्डर प्रदान करें।

अच्छा न दिखें, यह एक एक्सेस समस्या नहीं है।

फसाड:

एक उपतंत्र में इंटरफेस का एक सेट करने के लिए एक एकीकृत इंटरफेस प्रदान करें। फेकाडे एक उच्च स्तरीय इंटरफ़ेस को परिभाषित करता है जो उपप्रणाली का उपयोग करना आसान बनाता है।

यह ऐसा लगता है। आप अलग-अलग कार्यान्वयन, परीक्षण और अनुप्रयोग को सारणीबद्ध करने के लिए इंटरफेस का उपयोग कर रहे हैं।

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