मैं बॉय स्काउट नियम में एक महान विश्वासकर्ता हूं :
हमेशा क्लीनर में एक मॉड्यूल की जाँच करें जब आपने इसे चेक किया था। "कोई बात नहीं, मूल लेखक कौन था, अगर हम हमेशा कुछ प्रयास करते हैं, चाहे कितना भी छोटा हो, मॉड्यूल को बेहतर बनाने के लिए। परिणाम क्या होगा? मुझे लगता है कि अगर हम सभी ने उस सरल नियम का पालन किया, हम अपने सॉफ्टवेयर सिस्टम की अथक गिरावट का अंत देखेंगे। इसके बजाय, हमारे सिस्टम धीरे-धीरे बेहतर और बेहतर होते जाएंगे, क्योंकि वे विकसित होते हैं। हम टीमों को सिस्टम के लिए देखभाल करते हुए भी देखेंगे। सिर्फ अपने छोटे से छोटे हिस्से की देखभाल करने वाले व्यक्तियों की तुलना में।
अवसरवादी रिफैक्टिंग के संबंधित विचार में भी मैं एक महान आस्तिक हूँ :
हालाँकि कुछ निर्धारित रिफ्लेक्टरिंग प्रयासों के लिए जगह हैं, मैं अवसरवादी गतिविधि के रूप में रिफैक्टिंग को प्रोत्साहित करना पसंद करता हूं, जब भी और जहां भी कोड को साफ करने की आवश्यकता होती है - जो भी हो। इसका मतलब यह है कि किसी भी समय कोई व्यक्ति कुछ कोड देखता है जो कि जितना स्पष्ट होना चाहिए उतना नहीं है, उन्हें इसे ठीक करने का अवसर लेना चाहिए और फिर - या कम से कम कुछ मिनटों के भीतर।
विशेष रूप से दर्शाते लेख से निम्नलिखित अंश पर ध्यान दें:
मैं किसी भी विकास प्रथाओं से सावधान हूं, जो अवसरवादी रिफ्लेक्टरिंग के लिए घर्षण का कारण बनता है ... मेरी समझ में यह है कि ज्यादातर टीमें पर्याप्त रीफैक्टरिंग नहीं करती हैं, इसलिए किसी भी चीज़ पर ध्यान देना महत्वपूर्ण है जो लोगों को ऐसा करने से हतोत्साहित कर रहा है। फ्लश करने में मदद करने के लिए किसी भी समय आप एक छोटे से रीफैक्टरिंग को करने से हतोत्साहित महसूस करते हैं, यह सुनिश्चित करने के लिए कि आपको केवल एक या दो मिनट का समय लगेगा। इस तरह की कोई भी बाधा एक गंध है जिसे बातचीत से संकेत देना चाहिए। इसलिए हतोत्साहित करने के लिए एक नोट करें और इसे टीम के साथ लाएं। बहुत कम से कम यह आपके अगले पूर्वव्यापी के दौरान चर्चा की जानी चाहिए।
जहां मैं काम करता हूं, वहां एक विकास अभ्यास है जो भारी घर्षण का कारण बनता है - कोड समीक्षा (सीआर)। जब भी मैं कुछ भी बदलता हूं जो मेरे "असाइनमेंट" के दायरे में नहीं होता है, तो मुझे अपने समीक्षकों द्वारा फटकार लगाई जाती है कि मैं इस बदलाव को समीक्षा के लिए कठिन बना रहा हूं। यह विशेष रूप से सच है जब रीफैक्टरिंग शामिल होता है, क्योंकि यह "लाइन बाय लाइन" बनाता है तुलना मुश्किल। यह दृष्टिकोण यहाँ मानक है, जिसका अर्थ है कि अवसरवादी रिफैक्टिंग शायद ही कभी किया जाता है, और केवल "नियोजित" रिफ्लैक्टरिंग (जो आमतौर पर बहुत कम, बहुत देर हो जाती है) होता है, यदि बिल्कुल।
मेरा दावा है कि लाभ इसके लायक हैं, और यह है कि 3 समीक्षक थोड़ा कठिन काम करेंगे (वास्तव में कोड को पहले और बाद में समझने के बजाय, जो लाइनों के संकीर्ण दायरे को देखते हैं - जो कि अकेले ही होने के कारण समीक्षा बेहतर होगी ) ताकि कोड को पढ़ने और बनाए रखने वाले अगले 100 डेवलपर्स को फायदा हो। जब मैं इस तर्क को अपने समीक्षकों के सामने पेश करता हूं, तो वे कहते हैं कि उन्हें मेरे रिफैक्टिंग से कोई समस्या नहीं है, जब तक कि वह एक ही सीआर में नहीं है। हालाँकि मेरा दावा है कि यह एक मिथक है:
(१) ज्यादातर बार आपको केवल यह एहसास होता है कि आप अपने असाइनमेंट के बीच में क्या और कैसे रिफ्लेक्टर करना चाहते हैं। जैसा कि मार्टिन फाउलर कहते हैं:
जैसा कि आप कार्यक्षमता जोड़ते हैं, आपको पता चलता है कि आपके द्वारा जोड़े जा रहे कुछ कोड में कुछ मौजूदा कोड के साथ कुछ दोहराव है, इसलिए आपको चीजों को साफ करने के लिए मौजूदा कोड को फिर से तैयार करने की आवश्यकता है ... आपको कुछ काम मिल सकता है, लेकिन एहसास होगा कि यह होगा बेहतर है अगर मौजूदा कक्षाओं के साथ बातचीत को बदल दिया गया। उस अवसर को अपनाएं कि इससे पहले कि आप खुद पर किया गया विचार करें।
(2) कोई भी आप पर "रीफैक्टरिंग" सीआर जारी करने के लिए अनुकूल रूप से देखने वाला नहीं है जिसे आप करने वाले नहीं थे। सीआर में एक निश्चित ओवरहेड है और आपका प्रबंधक नहीं चाहता कि आप रिफैक्टरिंग पर अपना समय बर्बाद करें। जब आप उस परिवर्तन से बंडल होते हैं, जिसे आप करना चाहते हैं, तो यह समस्या कम से कम हो जाती है।
इस समस्या का समाधान Resharper द्वारा किया जाता है, जैसा कि प्रत्येक नई फ़ाइल मैं बदलाव में जोड़ता हूं (और मैं पहले से नहीं जान सकता कि कौन सी फाइलें समाप्त हो जाएंगी) आमतौर पर त्रुटियों और सुझावों से अटे पड़े होते हैं - जिनमें से अधिकांश मौके पर हैं और पूरी तरह से लायक हैं फिक्सिंग।
अंतिम परिणाम यह है कि मुझे भयानक कोड दिखाई देता है, और मैं इसे वहीं छोड़ देता हूं। विडंबना यह है कि मुझे लगता है कि इस तरह के कोड को ठीक करने से न केवल मेरे स्टैंड में सुधार होगा, बल्कि वास्तव में उन्हें कम और मुझे "अनफोकस्ड" आदमी के रूप में चित्रित किया जाएगा, जो समय बर्बाद करने वाले चीजों को ठीक करता है जो किसी को अपने काम करने के बजाय परवाह नहीं करता है। मैं इसके बारे में बुरा महसूस करता हूं क्योंकि मैं वास्तव में बुरे कोड को घृणा करता हूं और इसे देखने के लिए खड़ा नहीं हो सकता, चलो इसे अपने तरीकों से बुलाओ!
इस स्थिति का मैं कैसे उपाय कर सकता हूं इस पर कोई विचार?
your manager doesn't want you to "waste your time" on refactoring