2009-06-02 8 views
7

की संभावना को कम करता है, मेरे पास एक मामूली स्पेक परिवर्तन के कारण काम का एक टुकड़ा फेंक दिया गया था जो कि सही तरीके से नहीं दिखाया गया था। अगर यह परियोजना की शुरुआत में सही किया गया था तो उस काम का अधिकांश would have never have been needed in the first place काम करता है।कोड को इस तरह से कार्यान्वित करने के तरीके को कैसे करें जो पूर्ण री-वर्क्स

कुछ अच्छी टिप्स/डिज़ाइन सिद्धांत क्या हैं जो इन चीजों को होने से रोकते हैं?

या फीचर अनुरोधों या डिज़ाइन परिवर्तन को कार्यान्वित करने के लिए आवश्यक कोड को फिर से काम करने की मात्रा को कम करने के लिए?

उत्तर

6

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

दूसरों ने जो कुछ लाया है उस पर जोड़ना: संचार।
आप और ग्राहक, आप और प्रबंधन, आप और अन्य डेवलपर्स, आप और आपके क्यूए विभाग के बीच संचार, सभी के बीच संचार महत्वपूर्ण है। सुनिश्चित करें कि प्रबंधन उचित समय सीमा को समझता है और सुनिश्चित करता है कि आप और ग्राहक दोनों ही समझें कि आपकी इमारत क्या है।

4

उस ग्राहक के साथ संचार को खोलने के लिए समय निकालें, जिसके लिए आप उत्पाद बना रहे हैं। मील का पत्थर बनाएं और प्रत्येक मील का पत्थर पर ग्राहक को परियोजना प्रदर्शित करने के लिए एक समय निर्धारित करें। यहां तक ​​कि यदि ग्राहक इसे दिखाते समय मील का पत्थर से पूरी तरह से निराश होता है, तो आप अपने पास जो भी है और आखिरी मील का पत्थर से शुरू कर सकते हैं। यह भी आवश्यक है कि आपका काम उन ब्लॉकों में बनाया जाए जो एक दूसरे से स्वतंत्र काम करते हैं क्योंकि कंसवॉल्ड ने कहा था।

अंक ...

  1. रखें खुले संचार
  2. खुला और उत्पाद की प्रगति के साथ ईमानदारी से बताएं कि
  3. उत्पाद बदलाव के लिए ग्राहकों को व्यापार की आवश्यकताओं और विनिर्देशों के रूप में दैनिक बदलने के लिए तैयार रहें ।
+3

दूसरे शब्दों में स्टीव मैककोनेल द्वारा कोड पूर्ण पढ़ें। – Copas

0

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

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

स्रोत नियंत्रण का उपयोग भी सहायक हो सकता है। यदि आपको लगता है कि कोड का एक टुकड़ा ठीक से काम नहीं करता है, तो हमेशा एक पिछले मजबूत पुनरावृत्ति पर वापस लौटने का अवसर होता है।

0

हालांकि यह आपके उदाहरण पर सीधे लागू नहीं होता है, कोड लिखते समय मैं उन तरीकों से नजर रखने की कोशिश करता हूं जिनमें मैं भविष्य में विकसित सॉफ्टवेयर देख सकता हूं।

असल में मैं यह अनुमान लगाने की कोशिश करता हूं कि सॉफ्टवेयर कहां जाएगा, लेकिन गंभीर रूप से, मैं उन चीजों को लागू करने के लिए प्रलोभन का विरोध करता हूं जो मैं कल्पना कर सकता हूं। मैं बाद में एपीआई और इंटरफेस को उन सुविधाओं को लागू किए बिना संभावित वायदा का समर्थन करने की कोशिश कर रहा हूं, उम्मीद है कि इन 'संभावित परिदृश्य' मुझे बेहतर और भविष्य के सबूत इंटरफेस के साथ आने में मदद करेंगे।

हमेशा काम नहीं करता है।

2

सॉफ़्टवेयर आवश्यकताएं बदलती हैं, और ग्राहकों के साथ अधिक लगातार बातचीत के अलावा इसके बारे में कोई भी नहीं कर सकता है।

हालांकि, कोई भी कोड बना सकता है जो परिवर्तन के मुकाबले अधिक मजबूत है। यह आपको उस कोड को फेंकने से नहीं बचाएगा जो किसी आवश्यकता को पूरा करता है जिसे किसी और की आवश्यकता नहीं है, लेकिन यह ऐसे परिवर्तनों के प्रभाव को कम कर सकता है।

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

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

  • के बीच

  • 2
    • पुनरावृति छोटे

    • पुनरावृति अक्सर

    • परीक्षण एक साधारण काम कर रहे उत्पाद मिल बाहर asap तो ग्राहक इनपुट दे सकते हैं।

    मूल रूप से यह मान सामान बाहर फेंक दिया मिलेगा, तो कोड को उचित रूप से, और कुछ होने कि यह बाहर फेंक दिया बहुत समय लागत में काफी दूर तक नहीं मिलता है।

    +0

    मैं इसे दूसरा करता हूं। और सुनिश्चित करें कि आप अपने कोड से "शादी" नहीं करते हैं। –

    +2

    सहमत हैं कि आपके कोड से शादी हो रही है एक बहुत ही भयानक गलती है। आम तौर पर मैं पूरी तरह से शुरू करने के बाद एक पूर्ण मसौदा लिखना पसंद करता हूं। आप बाद में कोड बहुत साफ कर रहे हैं क्योंकि आप वास्तव में जानते हैं कि आप उस बिंदु पर क्या कर रहे हैं। – Louis

    2

    मॉड्यूलरिटी उत्तर है, जैसा कि कहा गया है। लेकिन यह अभ्यास में उपयोग करने के लिए एक कठिन जवाब हो सकता है। मैं पर ध्यान केंद्रित करने का सुझाव:

    • छोटे पुस्तकालयों जो पूर्वनिर्धारित बातें करते हैं अच्छी तरह से
    • मॉड्यूल के बीच कम से कम निर्भरता

    लेखन इंटरफेस पहले इन दोनों (के लिए इस्तेमाल इंटरफेस के साथ प्राप्त करने के लिए एक अच्छा तरीका है निर्भरता)। कोड लिखने से पहले इंटरफेस के खिलाफ अगला परीक्षण लिखना, अक्सर डिजाइन विकल्पों को हाइलाइट करता है जो अन-मॉड्यूलर होते हैं।

    मुझे नहीं पता कि आपका ऐप यूआई-गहन है या नहीं; जो मॉड्यूलर होने के लिए और अधिक कठिन बना सकता है। यह अभी भी प्रयास के लायक है, लेकिन यदि नहीं, तो मान लें कि इसे लंबे समय से पहले फेंक दिया जाएगा और हिमशैल सिद्धांत का पालन करें, कि 9 0% काम यूआई से बंधे नहीं है और मॉड्यूलर रखना इतना आसान है।

    आखिरकार, मैं सुझावों से भरे एंड्रयू शिकार और डेव थॉमस द्वारा "व्यावहारिक प्रोग्रामर" की अनुशंसा करता हूं। मेरा निजी पसंदीदा ड्रवाई है - "खुद को दोहराएं" - कोई भी कोड जो एक ही चीज़ कहता है दो बार गंध करता है।

    1

    G'day,

    अन्य उत्तर के माध्यम से देख रहे हैं यहाँ मैं है कि हर कोई उल्लेख कर रही है क्या अपनी अगली परियोजना के लिए क्या करने के लिए ध्यान दें।

    एक चीज जो गायब प्रतीत होती है, हालांकि यह पता लगाने के लिए धोने का एक धोखा है। सिंक से बाहर था। ग्राहक द्वारा आवश्यक वास्तविक आवश्यकताओं के साथ।

    मुझे चिंता है कि यदि आप ऐसा नहीं करते हैं, तो इससे कोई फर्क नहीं पड़ता कि आप अपनी अगली परियोजना को लागू करने के लिए क्या दृष्टिकोण ले रहे हैं, अगर आपको अभी भी वास्तविक आवश्यकताओं और विशिष्टता के बीच मेल नहीं मिला है। आपकी अगली परियोजना के लिए फिर आप एक ही स्थिति में एक बार फिर रहेंगे।

    यह खराब संचार या शायद ग्राहक आवश्यकता के रूप में सरल कुछ हो सकता है।

    लेकिन कम से कम यदि आप कारण जानते हैं और आप कोशिश कर सकते हैं और फिर से होने की संभावनाओं को कम करने में मदद कर सकते हैं।

    अन्य जवाब क्या कह रहे हैं और वहां कुछ अच्छी चीजें नहीं हैं, लेकिन कृपया क्या हुआ ताकि आप इसे दोहराने की निंदा नहीं कर सकें।

    HTH

    चियर्स,

    +0

    धन्यवाद, बहुत मान्य अंक। (मेरा मुद्दा मुख्य रूप से इसे पूरी तरह से कार्यान्वित कर रहा था और निर्णय ले रहा था कि वे अब इसका उपयोग करने के बाद नहीं चाहते थे, मुझे लगता है कि ग्राहक एक तरह से रेंगते हैं।) – Louis

    1

    कभी कभी एक पुनर्लेखन सबसे अच्छा समाधान है!
    यदि आप किसी कैमरे के लिए सॉफ़्टवेयर लिख रहे हैं, तो आप यह मान सकते हैं कि अगला संस्करण वीडियो, या स्टीरियो वीडियो या 3 डी लेजर स्कैनिंग भी करेगा और इस कार्यक्षमता के लिए सभी हुक शामिल करेगा, या आप इस तरह के एक बहुमुखी एक्स्टेंसिबल अंतरिक्ष यात्री वास्तुकला लिख ​​सकते हैं यह जेट इंजन समेत अगले कैमरे से सामना कर सकता है - लेकिन पैसा, संसाधन और प्रदर्शन में इसका खर्च बहुत अधिक होगा जो आप इसे करने से बेहतर कर सकते हैं।

    नई भूमिका में नई कार्यक्षमता के लिए एक पूर्ण पुनर्लेख हमेशा एक बुरा विचार नहीं है।

    +0

    मेरा मालिक आपको थप्पड़ मार देगा। haha। लेकिन आप सही हैं, कभी-कभी पुनः लिखने की आवश्यकता होती है। लेकिन वे बहुत सारे संसाधन लेते हैं, ज्यादातर समय यह सिर्फ नहीं किया जा सकता है। – Louis

    +0

    क्या आपने कोड देखा है जो एक पुनर्लेखन के बिना 'विस्तारित' किया गया है। जिन लोगों के साथ 99 से शुरू होने वाला एसएसएन का मतलब है कि अंतिम नाम फ़ील्ड अब पार्टनर का खाता नंबर है। –

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