हां, SOLID कोड डिजाइन करने का एक बहुत अच्छा तरीका है जिसे आसानी से जांचा जा सकता है। एक छोटे प्राइमर के रूप में:
एस - सिंगल रिस्पांसिबिलिटी प्रिंसिपल: एक ऑब्जेक्ट को बिल्कुल एक काम करना चाहिए, और कोडबेस में एकमात्र ऑब्जेक्ट होना चाहिए जो कि एक काम करता है। उदाहरण के लिए, एक डोमेन वर्ग लें, एक चालान बोलें। इनवॉइस क्लास को सिस्टम में उपयोग किए गए इनवॉइस के डेटा संरचना और व्यावसायिक नियमों का प्रतिनिधित्व करना चाहिए। यह एकमात्र वर्ग होना चाहिए जो कोडबेस में एक चालान का प्रतिनिधित्व करता है। यह कहने के लिए आगे टूट सकता है कि एक विधि का एक उद्देश्य होना चाहिए और कोडबेस में एकमात्र तरीका होना चाहिए जो इस आवश्यकता को पूरा करता है।
इस सिद्धांत का पालन करते हुए, आप अपने डिज़ाइन की परीक्षण क्षमता को घटाते हैं, आपको उन परीक्षणों की संख्या को लिखना पड़ता है जो विभिन्न वस्तुओं पर समान कार्यक्षमता का परीक्षण करते हैं, और आप आम तौर पर कार्यक्षमता के छोटे टुकड़ों के साथ समाप्त होते हैं जो अलगाव में परीक्षण करना आसान होते हैं।
ओ - ओपन / बंद सिद्धांत: एक वर्ग को विस्तार के लिए खुला होना चाहिए, लेकिन बदलने के लिए बंद । एक बार जब कोई वस्तु मौजूद होती है और सही तरीके से काम करती है, तो आदर्श रूप से नई कार्यक्षमता जोड़ने वाले परिवर्तन करने के लिए उस वस्तु में वापस जाने की आवश्यकता नहीं होनी चाहिए। इसके बजाय, वस्तु को विस्तारित किया जाना चाहिए, या तो इसे प्राप्त करके या उस नई कार्यक्षमता को प्रदान करने के लिए नए या अलग-अलग निर्भरता कार्यान्वयनों को प्लग करके। यह प्रतिगमन से बचा जाता है; जब आप पहले से ही कहीं और उपयोग किए जाते हैं, तो व्यवहार को बदले बिना, जब और जहां इसकी आवश्यकता हो, नई कार्यक्षमता को प्रस्तुत कर सकते हैं।
इस सिद्धांत का पालन करके, आप आमतौर पर "मोक्स" को सहन करने की कोड की क्षमता को बढ़ाते हैं, और आप नए व्यवहार का अनुमान लगाने के लिए परीक्षणों को फिर से लिखने से भी बचते हैं; किसी ऑब्जेक्ट के लिए सभी मौजूदा परीक्षण अभी भी संयुक्त राष्ट्र के विस्तारित कार्यान्वयन पर काम करते हैं, जबकि विस्तारित कार्यान्वयन का उपयोग करके नई कार्यक्षमता के लिए नए परीक्षण भी काम करने चाहिए।
एल - लिसकोव प्रतिस्थापन सिद्धांत: एक वर्ग ए, जो वर्ग बी पर निर्भर है, अंतर को जाने बिना किसी भी एक्स: बी का उपयोग करने में सक्षम होना चाहिए। इसका मूल रूप से यह अर्थ है कि आप जिस चीज पर निर्भरता के रूप में उपयोग करते हैं, उस पर आश्रित वर्ग द्वारा देखा गया समान व्यवहार होना चाहिए। एक संक्षिप्त उदाहरण के रूप में, मान लें कि आपके पास एक IWriter इंटरफ़ेस है जो Write (string) को उजागर करता है, जो ConsoleWriter द्वारा कार्यान्वित किया जाता है। अब आपको इसके बजाय एक फाइल पर लिखना है, इसलिए आप FileWriter बनाएं। ऐसा करने के लिए, आपको यह सुनिश्चित करना होगा कि FileWriter का उपयोग उसी तरह किया जा सकता है जैसे ConsoleWriter ने किया (इसका अर्थ है कि आश्रित इसके साथ बातचीत करने का एकमात्र तरीका लिखें (स्ट्रिंग) कहला सकता है), और इसलिए अतिरिक्त जानकारी जो कि FileWriter को करने की आवश्यकता हो सकती है नौकरी (पथ और लिखने के लिए फ़ाइल की तरह) आश्रित की तुलना में कहीं और से प्रदान की जानी चाहिए।
यह परीक्षण योग्य कोड लिखने के लिए बहुत बड़ा है, क्योंकि एलएसपी के अनुरूप एक डिज़ाइन में अपेक्षित व्यवहार को बदलने के बिना किसी भी बिंदु पर वास्तविक चीज़ के लिए प्रतिस्थापित एक "नकली" वस्तु हो सकती है, जिससे कोड के छोटे टुकड़ों को आत्मविश्वास के साथ अलगाव में परीक्षण करने की अनुमति मिलती है। उसके बाद यह सिस्टम प्लग की गई वास्तविक वस्तुओं के साथ काम करेगा।
I - इंटरफ़ेस पृथक्करण सिद्धांत: एक इंटरफ़ेस में कुछ तरीके होने चाहिए जो इंटरफ़ेस द्वारा परिभाषित भूमिका की कार्यक्षमता प्रदान करने के लिए संभव है । सीधे शब्दों में कहें, कम बड़े इंटरफेस की तुलना में अधिक छोटे इंटरफेस बेहतर होते हैं। ऐसा इसलिए है क्योंकि एक बड़े इंटरफ़ेस में परिवर्तन करने के लिए अधिक कारण हैं, और कोडबेस में कहीं और अधिक परिवर्तन का कारण बनता है जो आवश्यक नहीं हो सकता है।
आईएसपी का पालन परीक्षण के तहत प्रणालियों की जटिलता और उन SUT की निर्भरता को कम करके परीक्षण क्षमता में सुधार करता है। यदि आप जिस ऑब्जेक्ट का परीक्षण कर रहे हैं, वह एक इंटरफ़ेस IDoThreeThings पर निर्भर करता है जो DoOne (), DoTwo () और DoThree () को उजागर करता है, तो आपको एक ऐसी वस्तु का मज़ाक उड़ाना होगा जो सभी तीन विधियों को लागू करती है, भले ही ऑब्जेक्ट केवल DoTwo विधि का उपयोग करता हो। लेकिन, यदि ऑब्जेक्ट केवल IDoTwo पर निर्भर करता है (जो केवल DoTwo को उजागर करता है), तो आप अधिक आसानी से एक ऑब्जेक्ट को मॉक कर सकते हैं जिसमें वह एक विधि है।
डी - निर्भरता उलटा सिद्धांत: विवेक और अमूर्तता को कभी भी अन्य सहमति पर नहीं, बल्कि अमूर्तता पर निर्भर होना चाहिए । यह सिद्धांत सीधे ढीले युग्मन के सिद्धांत को लागू करता है। एक वस्तु को यह जानना कभी नहीं चाहिए कि एक वस्तु क्या है; इसके बजाय यह ध्यान रखना चाहिए कि कोई वस्तु क्या करती है। इसलिए, किसी वस्तु या विधि के गुणों और मापदंडों को परिभाषित करते समय ठोस कार्यान्वयन के उपयोग पर इंटरफेस और / या अमूर्त आधार वर्गों का उपयोग हमेशा पसंद किया जाता है। यह आपको उपयोग को बदलने के बिना दूसरे के लिए एक कार्यान्वयन को स्वैप करने की अनुमति देता है (यदि आप एलएसपी का पालन भी करते हैं, जो आरआईपी के साथ हाथ में जाता है)।
फिर से, यह परीक्षण क्षमता के लिए बहुत बड़ा है, क्योंकि यह आपको एक बार फिर, एक "उत्पादन" कार्यान्वयन के बजाय एक निर्भरता के नकली कार्यान्वयन को अपनी वस्तु में लागू करने के लिए परीक्षण किया जा रहा है, जबकि अभी भी वस्तु का सटीक रूप में परीक्षण करते समय यह होगा। उत्पादन में। यह "अलगाव" में इकाई परीक्षण की कुंजी है।