मुझे संदेह है कि मैंने यहां एक स्कूलबॉय त्रुटि की है, और मैं स्पष्टीकरण की तलाश कर रहा हूं। मेरे समाधान में बहुत सी कक्षाएं (C #) - मैं बहुमत कहता हूं - मैंने इसके लिए एक संबंधित इंटरफ़ेस लिखना समाप्त कर दिया है। उदाहरण के लिए "ICalculator" इंटरफ़ेस और "कैलकुलेटर" वर्ग जो इसे लागू करता है, भले ही मुझे उस कैलकुलेटर को एक अलग कार्यान्वयन के साथ बदलने की संभावना नहीं है। इसके अलावा, इनमें से अधिकांश वर्ग अपनी निर्भरता के रूप में एक ही परियोजना में रहते हैं - उन्हें वास्तव में केवल होना चाहिए internal
, लेकिन public
उनके संबंधित इंटरफेस को लागू करने के साइड-इफेक्ट के रूप में समाप्त हो गए हैं ।
मुझे लगता है कि कुछ झूठों से उपजी हर चीज के लिए इंटरफेस बनाने की यह प्रथा: -
1) मैंने मूल रूप से सोचा था कि यूनिट टेस्ट मॉक बनाने के लिए एक इंटरफ़ेस आवश्यक था (मैं Moq का उपयोग कर रहा हूं), लेकिन मैंने तब से पता लगाया है कि यदि कोई वर्ग इसके सदस्य हैं virtual
, तो इसका मजाक उड़ाया जा सकता है , और इसका एक पैरामीटर रहित निर्माता है (मुझे सही करें मैं गलत हूँ)।
2) मुझे लगता है कि मूल रूप से आईओसी ढांचे (कैसल विंडसर) के साथ एक वर्ग को पंजीकृत करने के लिए एक इंटरफ़ेस आवश्यक था, उदाहरण के लिए
Container.Register(Component.For<ICalculator>().ImplementedBy<Calculator>()...
जब वास्तव में मैं सिर्फ अपने खिलाफ ठोस प्रकार दर्ज कर सकता था:
Container.Register(Component.For<Calculator>().ImplementedBy<Calculator>()...
3) इंटरफेस का उपयोग करना, जैसे निर्भरता इंजेक्शन के लिए निर्माण पैरामीटर, "ढीले युग्मन" में परिणाम।
तो मैं इंटरफेस के साथ पागल हो गया हूँ ?! मैं उन परिदृश्यों से अवगत हूँ जहाँ आप "सामान्य रूप से" इंटरफ़ेस का उपयोग करेंगे, उदाहरण के लिए सार्वजनिक एपीआई को उजागर करना, या "प्लग करने योग्य" कार्यक्षमता जैसी चीजों के लिए। मेरे समाधान में छोटी संख्या में कक्षाएं हैं जो ऐसे उपयोग के मामलों में फिट होती हैं, लेकिन मुझे आश्चर्य है कि क्या अन्य सभी इंटरफेस अनावश्यक हैं, और उन्हें हटा दिया जाना चाहिए? बिंदु 3) के बारे में, क्या मैं "लूज कपलिंग" का उल्लंघन नहीं करूंगा, अगर मैं ऐसा करूं?
संपादित करें : - मैं सिर्फ Moq के साथ एक नाटक कर रहा हूं, और यह सार्वजनिक और आभासी होने के लिए तरीकों की आवश्यकता लगती है , और एक सार्वजनिक पैरामीटर रहित निर्माता है, ताकि उनका मजाक उड़ाया जा सके। तो ऐसा लगता है कि मेरे पास आंतरिक कक्षाएं नहीं हो सकती हैं?