अधिकांश स्थितियों में: यह निर्भर करता है।
लेकिन 99% मामलों में मैंने अपने स्वयं के असेंबली में इंटरफेस लगाए, कड़े इंटरफ़ेस निर्भरताओं को रोकने के लिए लॉजिकल इकाइयों में समूहित किया। पूर्व दिनों में मैंने बस इसे रखा जहां पहला कार्यान्वयन था। यह एक कसकर युग्मित गड़बड़ी में बढ़ गया जो बाद में विभाजित करना असंभव था।
यदि आप ढीले युग्मन के लिए अभ्यास/प्रयास करते हैं, तो मैं अलग-अलग असेंबली में इंटरफेस को आगे बढ़ाने का सुझाव देता हूं। मैं केवल करने के लिए पसंद में शामिल हैं:
- इंटरफेस,
- enumerations
- स्थिरांक
- इंटरफेस (विशिष्ट कार्यान्वयन पर निर्भर करता है नहीं) के लिए विस्तार तरीकों
- "स्थिर" वर्गों और structs (अर्थातउन है कि कभी कभी नहीं बदल जाएगा या प्राप्त की जा)
"इंटरफेस विधानसभाओं" में और केवल संदर्भ के लिए:
- अन्य "इंटरफेस विधानसभाओं"
- "उपकरण विधानसभाओं" (जो themself केवल शामिल करना चाहिए एक्सटेंशन विधियों, स्थिरांक जैसे स्थिर सामान)
यह आंतरिक रूप से उपयोग किए जाने वाले इंटरफेस पर लागू नहीं होता है जो केवल एक असेंबली में उपयोग किया जाता है (जो इंटरफेस का 1% होगा)।
केवल कार्यान्वयन कि इंटरफेस से एक है के रूप में ही विधानसभा में शामिल किया जा सकता है, कि:
- अन्य गैर इंटरफ़ेस विधानसभाओं पर निर्भर नहीं करता (आप के लिए सामान शामिल करने के लिए नहीं करना चाहते हैं एक इंटरफेस असेंबली का उपयोग करें जिसे केवल एक कार्यान्वयन के लिए जरूरी है जिसे आप उपयोग नहीं करना चाहते हैं)।
- डिफ़ॉल्ट किसी तरह का या कोई सेशन कार्यान्वयन
"कार्यान्वयन विधानसभाओं" केवल मुख्य विधानसभा में संदर्भित किया जाना चाहिए, अन्य विधानसभाओं केवल इंटरफ़ेस विधानसभा शामिल है। यह यह भी सुनिश्चित करता है कि आप कार्यान्वयन का उपयोग सीधे या परीक्षण नहीं करते हैं यदि इंटरफ़ेस इस विशेष कार्यान्वयन का है।
क्यों? इस तरह आपकी असेंबली केवल स्थिर असेंबली पर भरोसा करती है और कसकर युग्मित नहीं होती है। यदि आप निर्भरता इंजेक्शन का उपयोग करने की योजना बनाते हैं तो यह भी पसंदीदा तरीका है।
नेमस्पेस:
आप इंटरफेस की एक उप-नाम स्थान में कार्यान्वयन रखना चाहिए। तो, अपने उदाहरण लेने के लिए, मेरा सुझाव चाहते हैं:
MyCompany.AccountPackage.MasterAccounts
- में इंटरफ़ेस डाल इस इंटरफेस के लिए विस्तार के तरीकों, अन्य स्थिर सामान डाल भी
MyCompany.AccountPackage.MasterAccounts
- में में एक ठीक से नामित एक कार्यान्वयन डाल उप-नामस्थान
MyCompany.AccountPackage.MasterAccounts.SQLMasterAccounts
या बस MyCompany.AccountPackage.MasterAccounts.Implementation
।
क्यों?
कार्यान्वयन पक्ष से इसका मतलब है, आपको using MyCompany.AccountPackage.MasterAccounts.Interfaces
का उपयोग किए बिना सभी इंटरफेस और एक्सटेंशन सामान मिलते हैं।
ग्राहकों की तरफ से इसका मतलब है कि आपको कार्यान्वयन असेंबली में इंटेलिजेंस से बहुत अधिक विकल्पों से बचाया जाएगा (जिसमें अन्य कार्यान्वयन असेंबली शामिल नहीं होनी चाहिए), फिर भी मुख्य असेंबली में कार्यान्वयन तक आसानी से पहुंच है, जहां आप उपयोग करने के लिए ठोस कार्यान्वयन का चयन करते हैं।
मैंने किए गए सभी पाठ्यक्रमों और ट्यूटोरियल में इंटरफेस हमेशा कक्षा –
से ऊपर रखा गया है, मैं * उन्हें * अपना नामस्थान या पुस्तकालय नहीं दूंगा। सुपर-स्मार्ट लोगों में से एक के रूप में * .NET Framework Design दिशानिर्देशों में तर्क दिया गया है * (मुझे याद नहीं है कि कौन सा, और मेरी पुस्तक आसान नहीं है), आपको इंटरफेस नहीं भेजना चाहिए जबतक कि आप * कंक्रीट कार्यान्वयन को भी शिप न करें वह इंटरफेस। तो बस उस कार्यान्वयन के रूप में एक ही नेमस्पेस में इंटरफेस डालें। –
उस ने कहा, मैं वास्तव में आपके द्वारा लिखे गए इंटरफेस की संख्या को कम करने का प्रयास करता हूं, इसके बजाय जहां भी संभव हो वहां अमूर्त कक्षाओं को पसंद करता हूं। यह आपको इंटरफ़ेस के लगभग सभी फायदे देता है, जबकि आपको कई विधियों के लिए डिफ़ॉल्ट कार्यान्वयन प्रदान करने की इजाजत देता है। लेकिन यह वास्तव में व्यक्तिपरक है; मुझे यकीन नहीं है कि यह एसओ के लिए एक उपयुक्त विषय है। –