2010-07-28 8 views
7

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

उत्तर

7

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

  1. सबसे महत्वपूर्ण बात यह है कि हमने हमेशा अपना कोड सही जगह पर नहीं रखा। रूपों और मॉडलों में बहुत कम दृश्य विधियों में बहुत अधिक कार्यक्षमता थी। मैं इस समस्या को कई बार देखता हूं। इनपुट को संभालने के लिए, प्रारूपों का उपयोग करें, प्रारूप/tweak/... मॉडल डेटा, मॉडल विधियों या गुणों का उपयोग करें। गंभीरता से, एक पल में मैंने बेहतर जगहों पर कोड डालने से लगभग 150 लाइनों को 20 तक कम कर दिया। रखरखाव और पठनीयता को बहुत अच्छी तरह से सुधारता है
  2. वास्तव में हमने लिखा कई कोड वास्तव में पाइथन और/या django की पूर्ण शक्ति का उपयोग नहीं करते थे। पहले के लिए, Dive Into Python जैसे कुछ पढ़ने में बहुत मदद मिली, क्योंकि दूसरे ने मैंने केवल सभी जटिल संरचनाओं को ट्रैक किया (ज्यादातर 0.96 से विरासत कोड) और देखा कि क्या django दस्तावेज़ों में विकल्प थे। बेशक, एक समय के लिए सब कुछ कम करने की कोशिश कर अपना समय बर्बाद न करें, लेकिन निश्चित रूप से विरासत कोड के साथ यह पठनीयता और रखरखाव में सुधार करने में मदद कर सकता है।
  3. हमेशा django-snippets, google code जैसी साइटों पर नज़र डालें, ... यदि मौजूदा डीजेंगो परियोजनाएं सभ्य हैं जो आपकी बहुत सारी कार्यक्षमता को दूर कर सकती हैं। अक्सर इन परियोजनाओं को अधिक लोगों द्वारा देखा जाता है और इसलिए अधिक स्थिर और निष्पादक होते हैं। यदि कोई परियोजना आपकी सभी मांगों को पूरा नहीं करती है तो यह आपकी साइट के लिए सभी कस्टम करने की बजाय अपनी आवश्यकताओं को जोड़ने का एक अच्छा विचार भी हो सकता है।
  4. एप्लिकेशन को क्रॉस-ओवर निर्भरता न्यूनतम रखने की कोशिश करें। जब आप एक निर्भरता ग्राफ तैयार करेंगे (उदा। प्रत्येक ऐप को जोड़कर, जिसमें एक दूसरे के लिए विदेशी कुंजी हों) यह अभी भी स्पष्ट होना चाहिए और ऐसा कुछ नहीं जहां हर ऐप किसी अन्य ऐप से जुड़ा हुआ हो। आम तौर पर आपके पास कुछ 'सहायक' ऐप्स होंगे (जैसे उपयोगकर्ता सिस्टम, टैगिंग) जो कई और अन्य सभी ऐप्स द्वारा उपयोग किए जाते हैं, वास्तव में केवल उन ऐप्स पर निर्भर होते हैं।
  5. परीक्षण लिखें, django में एक उत्कृष्ट परीक्षण सूट है, इसलिए इसका उपयोग करें। निश्चित रूप से कोड के कुछ हिस्सों के लिए जो कई ऐप्स के लिए आम हैं और बदलने की संभावना है। वास्तव में, अचानक कुछ भी परेशान नहीं होने के कारण, जिसे आपने वास्तव में 4 महीने पहले हल किया था और आपके पास कोई सुराग नहीं है, तब से इसे फिर से तोड़ दिया।
  6. डेटाबेस सामान्यीकरण पर एक दूसरा नज़र डालें, django orm मॉडल अभी भी डेटाबेस के संबंध में कसकर जोड़ता है और इसलिए यह एक महत्वपूर्ण अवधारणा है, निश्चित रूप से जब आप उन मॉडल के साथ काम करते हैं जिन्हें बाद में विस्तारित किया जा सकता है।

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

+0

ठीक है, मैं तुम क्या लिखा है के सबसे अधिक है .. लेकिन मैं अभी भी, यकीन नहीं है कि क्या मैं यह सब ठीक कर रहा हूँ। – gruszczy

2

आप code smells के बारे में जान सकते हैं। कुछ लोग कहते हैं कि यदि आपका कोड गंध करता है तो इसका मतलब है कि आपको रिफैक्टरिंग पर विचार करना होगा।

यह वास्तव में बहुत व्यापक विषय है।कि याद रखें: - मैं व्यक्तिगत रूप से लगता है कि यह भी के लिए (समय से पहले) रिफैक्टरिंग मान्य है DonaldKnuth

समय से पहले अनुकूलन सब बुराई की जड़ है।

संपादित करें: यह भी है कोड के बारे में एक अच्छा संसाधन बदबू आ रही है: http://www.codinghorror.com/blog/2006/05/code-smells.html

+0

कोड गंध के लिए: क्या डुप्लिकेट कोड का पता लगाने के लिए कोई उपकरण हैं? – gruszczy

+0

मैं इसके लिए अपनी आंख का उपयोग करता हूं, ऐसी चीज के लिए सॉफ़्टवेयर टूल नहीं जानता। – dzida