मैं एक ऐसी परियोजना पर काम कर रहा हूं जो कई अलग-अलग, जटिल जटिल चीजें करता है, जो ढांचे में दूसरों द्वारा आसानी से एक्स्टेंसिबल माना जाता है।
पहले, कक्षाएं बड़ी थीं और कई चीजें होती थीं। उन व्यवहारों को बदलने के लिए, आपको उन वर्गों का विस्तार करना पड़ा। विधियां सभी वर्चुअल थीं और ऑब्जेक्ट की स्थिति को नहीं बदला, इसलिए ऐसा करना बहुत आसान था।
लेकिन जैसे ही प्रणाली बढ़ी, यह और अधिक स्पष्ट हो गया कि ढांचा एक-दूसरे के मोनोलिथिक ऑब्जेक्ट्स के साथ समाप्त हो रहा था, प्रत्येक में लूओओंग विरासत श्रृंखलाएं थीं। इसके परिणामस्वरूप अप्रत्याशित निर्भरताएं - बेस क्लास में परिभाषित ऑब्जेक्ट वाई का उत्पादन करने के लिए कक्षा एक्स का संग्रह करने वाला एक अमूर्त तरीका यह निर्धारित करता है कि हर किसी को इसे इस तरह से करना पड़ता है, भले ही इसे विरासत के पेड़ के आधे हिस्से में कोई समझ न हो। इसके परिणामस्वरूप बड़े वर्गों में भी 80% से अधिक कोड कवरेज प्राप्त करने के लिए यूनिट परीक्षणों की आवश्यकता होती है, और जटिलता ऐसी थी कि आप सुनिश्चित नहीं थे कि आपने सब कुछ ठीक से कवर किया है या नहीं। यह स्पष्ट था कि इस डिजाइन से फ्रेमवर्क बहुत कठोर और लचीला हो जाएगा।
तो हमने एसआरपी लाइनों के साथ सबकुछ फिर से डिजाइन किया। आपके पास इंटरफ़ेस, बेस क्लास और संभवतः, एक या अधिक कार्यान्वयन कक्षाएं होंगी। प्रत्येक एक विभिन्न वस्तुओं के बना था जो समग्र प्रक्रिया के महत्वपूर्ण कार्यों का प्रदर्शन करते थे। यदि आप एक भाग को बदलना चाहते हैं, तो आपने एक विधि को ओवरराइड नहीं किया है, तो आप एक और ऑब्जेक्ट तैयार करेंगे जो अपेक्षित इंटरफ़ेस/बेस क्लास को बढ़ाएगा और अपनी नौकरी अलग-अलग करेगा। एसआरपी को तर्कों में भी ले लिया गया था और कक्षा के तरीकों के मूल्य वापस कर दिया गया था। वाई ऑब्जेक्ट्स बनाने के लिए उपयोग की जाने वाली एक्स क्लास के संग्रह को पास करने के बजाय सिस्टम के उन हिस्सों के लिए, लचीला होना आवश्यक था, वाई ऑब्जेक्ट्स के उत्पादन की प्रक्रिया को समाहित करने के लिए एक वर्ग बनाया गया था। सिस्टम में घटक इन उत्पादकों को चारों ओर पास करेंगे, उन्हें दूसरों के साथ जोड़ देंगे (उत्पादकों की ज़िम्मेदारी), और अंत में उन्हें उत्पादन करने के लिए उपयोग करें। यह विभिन्न प्रकार के उत्पादकों के लिए अनुमति दी गई है, जिनमें से सभी का बिल्कुल इलाज किया जा सकता है वही, भले ही उन्होंने काफी अलग चीजें कीं। इस कदम ने प्रत्येक वर्ग के कोड बेस को भी काफी हद तक कम कर दिया और परीक्षण करने के लिए उन्हें बहुत आसान बना दिया।
मैं कहूंगा कि, एक नए डेवलपर के रूप में, यह सब कुछ इस स्तर तक तोड़ने के लिए बहुत मुश्किल है। आपको लगभग मिट्टी की एक बड़ी गेंद लिखनी है, समझें कि यह कैसे काम करता है, फिर इसे कई अलग-अलग घटकों के रूप में फिर से डिजाइन करें, प्रत्येक व्यक्ति पूरे हिस्से के लिए ज़िम्मेदारी लेता है।
मुझे लगता है कि आपको इसे विकी में बदलना चाहिए, क्योंकि कोई भी निश्चित उत्तर नहीं है। – Will
मुझे यकीन नहीं है कि मैं सहमत हूं। मुझे लगता है कि वे अधिक से कम सही जवाब हैं। और मुझे लगता है कि बहुत से लोग मानते हैं कि यह वास्तव में कहीं अधिक व्यक्तिपरक या संदर्भ-संवेदनशील है - जो आंशिक रूप से मैंने सवाल पोस्ट किया है। यद्यपि आपकी टिप्पणी के लिए धन्यवाद। – Thiru