2008-10-02 18 views
22

जब से मैं नेट का उपयोग कर, मैं सिर्फ स्थित है और अपने स्वयं के छोटे कंटेनर में निहित कोड रखने के लिए सहायक वर्ग या आंशिक कक्षाएं बनाने किया गया है, आदि शुरू कर दियारिफैक्टरिंग कोड: कब करना है?

क्या मैं जानना चाहता हूँ देख रहा हूँ सर्वोत्तम प्रथाओं है एक कोड को स्वच्छ और पॉलिश के रूप में बनाने के लिए संभवतः यह हो सकता है।

स्पष्ट रूप से साफ कोड व्यक्तिपरक है, लेकिन मैं चीजों का उपयोग करने के बारे में बात कर रहा हूं (उन्हें कैसे उपयोग नहीं किया जाता है) जैसे कि पॉलिमॉर्फिज्म, विरासत, इंटरफेस, कक्षाएं और कक्षाओं को अधिक उचित तरीके से डिजाइन करने के लिए (उन्हें और अधिक उपयोगी बनाने के लिए, केवल 'डेटाबेसहेल्पर' न कहें, क्योंकि कुछ ने code smells wiki में इस बुरे अभ्यास को माना है)।

क्या वहां कोई संसाधन है जो संभवतः इस तरह के निर्णय लेने में मदद कर सकता है?

ध्यान रखें कि मैंने सीएस या सॉफ्टवेयर इंजीनियरिंग कोर्स भी शुरू नहीं किया है, और यह कि एक शिक्षण संसाधन वास्तविक जीवन में काफी सीमित है।

उत्तर

23

मेरे लिए एक असली आंखें खोल Refactoring: Improving the Design of Existing Code था:

उचित प्रशिक्षण के साथ एक कुशल प्रणाली डिजाइनर एक बुरा डिजाइन और यह rework अच्छी तरह से डिजाइन, मजबूत कोड में ले जा सकते हैं। इस पुस्तक में, मार्टिन फाउलर आपको दिखाता है कि रिफैक्टरिंग के लिए अवसर आमतौर पर और खराब डिज़ाइन को एक अच्छे में फिर से बनाने के बारे में कैसे जा सकते हैं।

Refactoring http://ecx.images-amazon.com/images/I/519XT0DER6L._SL160_PIlitb-dp-arrow,TopRight,21,-23_SH30_OU01_AA115_.jpg

यह मुझे मदद की कुशलता और व्यवस्थित ढंग से कोड refactor करने के लिए। इसके अलावा अन्य डेवलपर्स के साथ चर्चा में मुझे बहुत मदद मिली, जब उनके holy code को बदला जाना है ...

+0

मैं उस किताब प्यार पाने के लिए कोशिश कर रहा हूँ! –

+0

करेंगे, धन्यवाद! – RodgerB

5

पर यहाँ एक पुस्तक Clean Code कहा जाता है की स्लेश डॉट पर एक समीक्षा है।

पुस्तक स्पष्ट रूप से थोड़ा सूखा है लेकिन बहुत अच्छा है।

+0

अरे - कि मेरी समीक्षा है! पुस्तक के साथ चुनौती यह है कि यह जावा पर कई बार केंद्रित है। लेकिन, आम तौर पर, चाचा बॉब जानता है कि वह किस बारे में बात कर रहा है, और यह लंबे समय से ऐसा कर रहा है। –

+0

@Cory Foy अच्छा समीक्षा मैं गंभीरता से यह के आधार पर पुस्तक खरीदने considdering कर रहा हूँ। हालांकि मैं अपनी कंपनी पहले मेरे लिए इसे खरीदने के लिए :) –

11

जेफ एटवुड ने nice blog post on refactoring and code smells बनाया, तो आप इसे देखना चाहेंगे।

.NET में कोड को दोबारा करने के लिए कुछ समय लगता है। refactor effectively और mercilessly के लिए आपको कुछ ऑब्जेक्ट उन्मुख design principles (या design techniques) जानने की आवश्यकता है।

संक्षेप में, आप कोड गंध को हटाने और परिवर्तन करने में आसान बनाने के लिए कोड को दोबारा प्रतिक्रिया देते हैं। इसके अलावा, इसे अधिक मत करो।

+0

दिलचस्प ब्लॉग पोस्ट, धन्यवाद। – RodgerB

1
  • समस्याएं उत्पन्न होने पर आपको कोड को फिर से कारक करें। कोई भी समस्या होगी: प्रदर्शन, स्केलबिलिटी, एकीकरण, रखरखाव - कुछ भी जो आपको उस पर अधिक समय बिताता है जब आपको करना चाहिए। यह टूटा नहीं है इसे ठीक न करें, भले ही आपको विश्वास न हो कि यह साफ है या आधुनिक मानकों तक है।
  • कोड को सही बनाने में बहुत अधिक समय नहीं व्यतीत करें। आप कभी पूर्णता प्राप्त नहीं करेंगे लेकिन आप ऐसा करने का प्रयास करने में बहुत समय व्यतीत कर सकते हैं। रिटर्न कम करने के कानून को याद रखें।
  • किसी प्रोजेक्ट के अंदर केवल उस कोड पर फिर से कारक होता है जब आप वास्तव में कार्यक्षमता पर काम कर रहे होते हैं जो उस पर निर्भर करता है। अर्थात। अगर आपके पास पुनरावृत्ति के लिए उपयोगकर्ता की कहानी है, तो "अपलोड मैकेनिज्म बदलें" या "फ़ाइल अपलोड में बग फिक्सिंग" के लिए कॉल करें, तो आप फाइल अपलोडिंग कोड को फिर से कारक बना सकते हैं। हालांकि यदि आपकी उपयोगकर्ता कहानी "फ़ाइल अपलोड यूआई डिज़ाइन को सुधारने" के बारे में है, तो व्यवसाय तर्क में न जाएं।
1

मैं Domain Driven Design की सिफारिश करता हूं। मुझे लगता है कि यागनी और हमेशा रिफैक्टर सिद्धांत दोनों दो सरल हैं। इस मुद्दे पर उम्र का पुराना सवाल क्या है यदि मैं किसी फ़ंक्शन में "अगर (कुछ आर्ग्यूमेंट == कुछ वैल्यू)" दोबारा दोहराता हूं या इसे इनलाइन छोड़ देता हूं?

कोई हाँ या कोई जवाब नहीं है। यदि डीडीडी एक उदारता नियम का प्रतिनिधित्व करता है तो डीडीडी इसे पुन: प्रतिक्रिया देने की सलाह देता है। रिफैक्टरिंग (केवल) पुन: उपयोग करने के बारे में नहीं है बल्कि इरादे स्पष्ट करने के बारे में है।

1

Working Effectively with Legacy Code इस विषय पर मैंने देखी गई सबसे अच्छी किताबों में से एक है।

पुस्तक के शीर्षक को दूर न करें - एक औपचारिक अवधारणा (जिसकी जगह है) के रूप में रिफैक्टरिंग का इलाज करने की बजाय, इस पुस्तक में बहुत सारे हैं और बहुत सारे सरल "मैंने ऐसा क्यों नहीं सोचा" सुझाव । चीजें जैसे "कक्षा के माध्यम से जाएं और किसी भी तरीके को हटाएं जो सीधे उस कक्षा में नहीं आती है और उन्हें एक अलग में डाल देती है"।

उदा। फ़ाइल के लिए उस ग्रिड के लेआउट को बनाए रखने के लिए आपके पास एक ग्रिड और कुछ कोड है। आप संभावित रूप से एक अलग वर्ग में लेआउट स्थायी कोड को सुरक्षित रूप से स्थानांतरित कर सकते हैं।

0

मुझे अभी कोड पूर्ण की एक प्रति मिली है, और पाया कि इस पर एक अनुभाग था।

हालांकि मैं अभी भी स्वीकार किए गए उत्तर की पुस्तक पढ़ रहा हूं, कोड कोड पूर्ण ने मुझे सिखाया है कि कक्षाओं को डिजाइन करने के बारे में मुझे लगता है कि नाटकीय रूप से सुधार हुआ है।

आज से पहले, मुझे नहीं पता था कि एडीटी क्या था (सार डेटा प्रकार), और अब मुझे पता है कि encapsulation का पालन करने वाले वर्गों को कैसे विकसित किया जाए।

0

http://www.refactoring.com/ पर रीफैक्टरिंग के लिए समर्पित एक वेब पेज है। इसमें रिफैक्टरिंग-संबंधित मुद्दों पर चर्चा करने के लिए कोड को रीफैक्टरिंग के साथ-साथ मेलिंग सूची के विषय पर और संसाधनों के कई संदर्भ शामिल हैं।

अंतिम लेकिन कम से कम नहीं, रेफैक्टरिंग की एक बड़ी (और अभी भी बढ़ती हुई) कैटलॉग उपलब्ध है जो मार्टिन फाउलर द्वारा पुस्तक की प्रतिक्रिया (बहुत अधिक अनुशंसित) में लिखी गई चीज़ों से परे अच्छी तरह से फैली हुई है।

1

अंगूठे का मेरा नियम से कोड को खराब आकार में छोड़ दें।

विचार बेहतर पर सही परिणाम प्राप्त करने के बिना, या सभी तरह से जाने के बिना काम करना है।

व्यक्तिगत रिफैक्टरिंग कभी-कभी एक संदिग्ध लाभ होता है, और - एक चरम उदाहरण के रूप में - यह वास्तव में तर्क दिया जा सकता है कि m_Pim_PI से बेहतर नाम है। हालांकि, अक्सर एक विकल्प अधिक सुसंगत होता है, और स्पष्ट रूप से "बेहतर" नहीं होने पर भी कम आश्चर्यजनक होता है।

एक ऐसी स्थिति जहां मैं नियामक खुद को पुनः प्राप्त करने के लिए स्वचालित रूप से कोड का एक टुकड़ा लागू करने के लिए लागू करता हूं।

वहाँ अक्सर कुछ TODO की प्रतीक्षा खिलाया जा करने के लिए, कुछ विसंगतियां या कि हाल ही में बेहतर पुस्तकालय समर्थन हासिल कर ली है कभी कभी कस्टम कार्यक्षमता कर रहे हैं। इन परिवर्तनों को करने से पहले मैं लागू वास्तविक सुविधा का अनुरोध मुझे कोड की कुछ समझ देता है, और मैं "पहले" कार्यक्षमता को सत्यापित।

एक और मुद्दा के बाद फिक्सिंग कीड़े है। इसके बाद, इसलिए पहले-रेपो प्रभावित नहीं होता है, और बग फिक्स और रिफैक्टरिंग दो अलग-अलग काम करता है।

संबंधित मुद्दे