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