एसओएलआईडी के अनुसार, न केवल आपको इंटरफ़ेस बनाना चाहिए, और न केवल यह एक अलग फाइल में होना चाहिए, यह एक अलग विधानसभा में होना चाहिए।
क्यूं कर? क्योंकि किसी स्रोत फ़ाइल का असेंबली में संकलित करने के लिए असेंबली के पुन: संकलन की आवश्यकता होती है, और असेंबली में किसी भी परिवर्तन के लिए किसी भी निर्भर असेंबली के पुनर्संयोजन की आवश्यकता होती है। इसलिए, यदि आपका उद्देश्य, SOLID पर आधारित है, तो कार्यान्वयन A को कार्यान्वयन B से बदलने में सक्षम होना है, जबकि वर्ग C इंटरफ़ेस पर निर्भर है, मुझे अंतर नहीं जानना है, आपको यह सुनिश्चित करना होगा कि I के साथ असेंबली हो इसमें परिवर्तन नहीं होता है, इस प्रकार यह रक्षा करता है।
"लेकिन यह सिर्फ एक पुनरावृत्ति है" मैं आपको विरोध सुनता हूं। वैसे यह हो सकता है, लेकिन आपके स्मार्टफोन ऐप में, जो आपके उपयोगकर्ताओं के डेटा बैंडविड्थ पर आसान है; एक बाइनरी को डाउनलोड करना जो बदल गया, या उस बाइनरी और पांच अन्य को उस कोड के साथ डाउनलोड करना जो उस पर निर्भर करता है? प्रत्येक प्रोग्राम को LAN पर डेस्कटॉप कंप्यूटर द्वारा उपभोग किए जाने के लिए नहीं लिखा जाता है। उस स्थिति में भी, जहां बैंडविड्थ और मेमोरी सस्ते होते हैं, छोटे पैच रिलीज़ का मूल्य हो सकता है क्योंकि वे सक्रिय निर्देशिका या समान डोमेन प्रबंधन परतों के माध्यम से पूरे लैन को बाहर करने के लिए तुच्छ हैं; अगली बार पूरी तरह से पुनर्स्थापित होने के लिए कुछ मिनटों के बजाय लॉग ऑन करने के लिए आपके उपयोगकर्ता इसके लिए केवल कुछ सेकंड प्रतीक्षा करेंगे। इस बात का उल्लेख नहीं है कि, एक परियोजना बनाते समय कम असेंबली, जिसे पुन: स्थापित किया जाना चाहिए, जितनी तेजी से इसका निर्माण होगा,
अब, अस्वीकरण: यह हमेशा संभव या संभव नहीं है। ऐसा करने का सबसे आसान तरीका एक केंद्रीकृत "इंटरफेस" परियोजना बनाना है। इसका अपना डाउनसाइड है; कोड कम पुन: प्रयोज्य हो जाता है क्योंकि इंटरफ़ेस प्रोजेक्ट और कार्यान्वयन परियोजना को अन्य एप्लिकेशन में संदर्भित किया जाता है जो आपके ऐप की दृढ़ता परत या अन्य प्रमुख घटकों का पुन: उपयोग कर रहा है। आप अधिक कसकर युग्मित विधानसभाओं में इंटरफेस को विभाजित करके उस समस्या को दूर कर सकते हैं, लेकिन फिर आपके ऐप में अधिक परियोजनाएं हैं जो एक पूर्ण निर्माण को बहुत दर्दनाक बनाती हैं। कुंजी संतुलन है, और शिथिल-युग्मित डिजाइन को बनाए रखना है; आप आमतौर पर आवश्यक के रूप में फ़ाइलों को स्थानांतरित कर सकते हैं, इसलिए जब आप देखते हैं कि एक वर्ग को कई परिवर्तनों की आवश्यकता होगी, या कि इंटरफ़ेस के नए कार्यान्वयन की नियमित रूप से आवश्यकता होगी (शायद अन्य सॉफ़्टवेयर के नए-समर्थित संस्करणों के साथ इंटरफ़ेस करने के लिए,