मैं वेब सेवा इंटरफ़ेस से मेल खाने वाला रैपर बनाउंगा। खुलासा सभी वस्तुओं को लपेटना भी एक अच्छा विचार होगा। मूल रूप से एक प्रॉक्सी बनाएँ। इस प्रकार की चीज़ के लिए मुझे वास्तव में उपयोगी लगता है कि एपीआई से मेल खाता है और इसे कार्यान्वित करता है। इस तरह, आप डब्ल्यूसीएफ कॉल से जुड़े ओवरहेड (या संभावित लागत) के बिना परीक्षण के लिए डीएलएल का एक डमी संस्करण बना सकते हैं। यदि आपको भविष्य में वैकल्पिक प्रदाता के साथ डब्ल्यूसीएफ कॉल को प्रतिस्थापित करने की आवश्यकता है तो इससे यह अधिक आसान हो जाएगा।
उदाहरण के तौर पर, मान लीजिए कि हमारे पास भुगतान प्रसंस्करण के लिए बाहरी प्रदाता को डब्ल्यूसीएफ सेवा है। इस तरह कुछ:
void ProcessPayment(float amount);
हम आसानी से इसे हमारे कोड में लगा सकते हैं। समस्या यह है कि इंटरफ़ेस में एक साधारण परिवर्तन के परिणामस्वरूप हमें कोड के संदर्भ में हर जगह परिवर्तन करना पड़ता है। यदि आवश्यक हो तो इंटरफ़ेस लगभग समान था, भले ही हम प्रदाताओं को किसी और के रूप में बदल दें, वही आवश्यक होगा। एक सरल अंतरफलक की तरह कुछ जोड़ना:
interface IPaymentProvider
{
void ProcessPayment(float amount);
}
पूरी तरह से WCF सेवा से हमारे कोड दसगुणा होगा। हम आसानी से इस तरह एक वर्ग बना सकते हैं:
class PaymentProviderAWrapper : IPaymentProvider
{
void ProcessPayment()
{
// Call the WCF service
}
}
हम Spring.NET की तरह एक कारखाने या निर्भरता इंजेक्शन ढांचे के साथ गतिशील रूप से लोड कर सकता है। एक प्रदाता बी को बदलने से नई आवरण बनाने के रूप में सरल होगा:
class PaymentProviderBWrapper : IPaymentProvider
{
void ProcessPayment()
{
// Call provider B's Native DLL
}
}
बी करने के लिए प्रदाता एक से अपने कोड स्विचिंग एक विन्यास सेटिंग को बदलने के रूप में सरल हो जाएगा।
भले ही हमने लाइब्रेरी को सीधे हमारे कोड में संकलित किया हो, फिर भी हमें नई पुस्तकालय का उपयोग करने के लिए निर्माण तर्क बदलना होगा। हमारा बाकी का आवेदन बिल्कुल नहीं बदलेगा। बस एक साधारण recompile।
नीचे चर्चा को जोड़ने (उत्तम व्यवहारों) मैं (एक ही प्रश्नकर्ता द्वारा) निम्नलिखित काफी उपयोगी पाया: http://stackoverflow.com/questions/10575724/moving-wcf-contracts-to-a-separate-dll –