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