2010-09-07 6 views
17

मैं एक dejavu भावना है जब [What to do about a 11000 lines C++ source file?] पोस्ट को पढ़ने, लेकिन मुझे नहीं लगता मैं अपने खुद के आधार पर कार्रवाई करते के बाद से मैं अधिकार कार्रवाई करने की जरूरत नहीं है शुरू कर सकते हैं करते हैं (है ना?)। तो मुझे लगता है कि पहला कदम संगठन में लोगों को मनाने के लिए है कि कोड का बड़ा हिस्सा खराब है।लोगों को यह समझाने के लिए कि कोड की 11975 लाइनों वाली एक कक्षा खराब है?

मैं इसकी प्रबल संभावना है कि इस वर्ग के बड़ा और बड़ा हो जाएगा है एक ऐसी ही स्थिति है जहाँ कोड और हर बार की 11975 लाइनों के साथ एकल वर्ग वहाँ नई विशेषताएं हैं वहाँ है,।

+3

शायद यह एक ही फाइल है (मार्टिन इसे ठीक करने के प्रबंधन नहीं किया) :) – Default

+0

तुम किसी को समझाने की जरूरत नहीं है है। रखरखाव मनाने के लिए होगा। यदि ऐसा नहीं होता है, तो यह बुरा नहीं है। – sehe

उत्तर

22

आपकी सहानुभूति है। कोई भी वर्ग जो कि विशाल है, अनिवार्य रूप से Single Responsibility Principle तोड़ रहा है, जिससे इसे बनाए रखना मुश्किल हो जाता है। अपने नए कोड छोटे रखें

  • :

    मेरे सबसे अच्छा सलाह उदाहरण के द्वारा नेतृत्व करने के लिए है।

  • Refactor कक्षाओं और कार्यों के आकार को कम करने के लिए कोड बदलते समय निर्दयतापूर्वक।

आपका कोड विरासत कोड की तुलना में एक बीकन की तरह चमक जाएगा और आपकी टीम समझ जाएगी कि कौन सा कोड बनाए रखना आसान है।

+7

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

+19

मुझे लगता है कि जब आप एक वर्ग के लिए 11,000+ लाइनों जैसे लुभावनी चरम सीमा तक पहुंचते हैं तो यह बकवास कोड का एक बहुत विश्वसनीय संकेतक है। –

+4

@ डेविड: हाँ, लेकिन 11,975 कोड कोड? आपकी कक्षा संभवतः क्या कर सकती है जिसके लिए बहुत अधिक कोड की आवश्यकता है? –

1

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

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

लेकिन हाँ, यह आम तौर पर खराब है।

+8

मुझे इस बात से असहमत होना है कि कम से कम उस सीमा तक जिसे आप "प्रोग्रामर" को एक व्यक्ति के रूप में संदर्भित करते हैं। यहां तक ​​कि यदि * वर्तमान * प्रोग्रामर कोड को ठीक से समझ/रख सकता है, तो सवाल यह है कि क्या बाद वाला प्रोग्रामर ऐसा कर सकता है? जब तक "प्रोग्रामर" एक व्यक्ति की दुकान नहीं है, यह वह सब कुछ नहीं है जो वह पसंद करता है: संगठन को यह आग्रह करने का अधिकार है कि कोड इस तरह से संरचित किया जा सके कि अन्य टीम के सदस्यों (वर्तमान और भविष्य) द्वारा रखरखाव की सुविधा प्रदान की जाए।)। "प्रोग्रामर" द्वारा –

+0

, मेरा मतलब सामूहिक प्रोग्रामर है। तो यदि प्रोजेक्ट पर काम करने वाले थ्र 2, 3 या 100 लोग सभी उस तरह की संरचना चाहते हैं, तो हो। –

+0

भले ही यह पठनीय हो, आपका संकलन समय अस्वीकार्य रूप से लंबा होगा। उल्लेख नहीं है कि आप अपने सभी टूल्स को काम करने के लिए कठिन बनाने वाली कई छोटी फ़ाइलों के साथ काम करने के लिए ट्यून कर रहे हैं। –

3

इस वर्ग के कई छोटे तरीकों के होते हैं और इन तरीकों वास्तव में वर्ग यानी वे एक दूसरे को और वर्ग के लिए एकजुट हैं के हैं, तो यह जरूरी नहीं कि खराब है।

मात्र तथ्य यह है कि एक वर्ग बड़ी है यह स्वचालित रूप से बुरा नहीं है।

क्या अधिक महत्वपूर्ण है एक तथाकथित "भगवान वर्ग" है कि कई तरीकों एक दूसरे को या वर्ग में ही करने के लिए कोई वैचारिक रिश्ता नहीं है कि होता है से परहेज है।

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

आपको इस वर्ग में कोड पर वापस जा सकने वाले समर्थन समस्याओं की संख्या के बारे में मीट्रिक एकत्र करना चाहिए। साथ ही, अन्य छोटे वर्गों की तुलना में डेवलपर्स इस कक्षा में बदलाव करने में कितना समय व्यतीत करते हैं? एक बार आपके पास ये मीट्रिक हो जाने के बाद आप प्रबंधन को समझाने के लिए एक बेहतर स्थिति में हैं क्यों ऐसी बड़ी कक्षा खराब है।

बड़े तरीकों मैं इकाई परीक्षण के साथ Martin Fowlers book में वर्णित रिफैक्टरिंग तकनीकों का प्रयोग करते हैं साथ सुनिश्चित करने के लिए कोई नया कीड़े शुरू की कर रहे हैं की एक छोटी संख्या के साथ एक बड़े वर्ग की स्थिति में।

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

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

+0

पहली बार, मैंने इसे 'पूरी विधि डाउनलोड करने की आवश्यकता' के रूप में पढ़ा .... :) – Chubsdad

11

11975 (या यह 12000 पहले से ही :) :) वर्ग कार्यान्वयन की रेखाएं हैं। क्या यह खराब है? Cerainly ऐसा दिखता है। लेकिन ...

यह निर्भर करता है। आम तौर पर मध्यस्थ पैटर्न या फेकाडे पैटर्न को लागू करने वाले वर्ग बहुत बड़े होते हैं। उनके पास बहुत जटिल रूटिंग/संचार प्रोटोकॉल है। कक्षाओं की तरह "भगवान" भी बहुत विशाल और एकात्मक हो जाते हैं। संक्षेप में, एक वर्ग वास्तव में बड़ा हो सकता है लेकिन कोई समस्या नहीं हो सकती है।

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

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

ए। क्या इस वर्ग में कई कीड़े हैं?

बी। क्या इस वर्ग के बग फिक्स हमेशा रिग्रेशन दोष पेश करते हैं? (उच्च युग्मन, कम एकजुटता?)

सी। इस वर्ग में दोष कब तय किए जाएंगे? यह अन्य मॉड्यूल के साथ तुलना कैसे करता है?

डी। महत्वपूर्ण मॉड्यूल (उदा। युग्मन) को चित्रित करने के लिए इस मॉड्यूल के लिए कुछ यूएमएल आरेख तैयार करें।

ई। मेट्रिक्स पर जितना पढ़ें/अपनी गुणवत्ता/मेट्रिक्स/क्यूए टीम से परामर्श लें और पर्याप्त डेटा पॉइंट उत्पन्न करें। ओओएडी मेट्रिक्स का एक उदाहरण here है लेकिन मुझे यकीन है कि बहुत सारे हैं।

संपादित 2 (कुछ मामूली परिवर्तन)

च। नियंत्रण के अपने क्षेत्र में कुछ प्रमुख हितधारकों से प्रारंभिक समर्थन प्राप्त करें। इसके बाद, प्राप्त करें, कोई भी जो इन तथ्यों को अच्छी तरह प्रस्तुत कर सकता है! मैंने इस चरण में कई चीजें असफल देखी हैं!

गुड लक!

+0

मुझे लगता है कि यहां लोग शायद http://google.com/search?q=Mediator+pattern, http करेंगे : //google.com/search? q = फेकाडे + पैटर्न, http://google.com/search?q=Cyclomatic+ कॉम्प्लेक्सिटी, और http://google.com/search?q=Single+responsibility+principle जब आप उन्हें इसका जिक्र करते हैं (यहां तक ​​कि मैं ऐसा करता हूं)। इस बिंदु पर, आप शायद अनुमान लगा सकते हैं, लिखित कोड के लिए कोई क्यूए टीम नहीं है। क्यूए लगातार सप्ताहांत/सप्ताहांत के दौरान ऐप्स चलाकर होता है। –

6

उन्हें संक्षेप में बताएं कि कक्षा एक मिनट में क्या प्रतिनिधित्व करती है।

+0

वाह, यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है। नई कक्षाओं के लिए, हेडर में एक संक्षिप्त विवरण मुझे (अब, केवल मुझे) पर ध्यान केंद्रित करने की अनुमति देता है (1) कक्षा के लिए क्या जिम्मेदार होना चाहिए; और (2) कक्षा में कौन से कार्यों/कार्यक्षमताओं को जाना चाहिए। –

1

यहाँ मेरी प्रारंभिक प्रतिक्रिया है:

  1. वहाँ SLOC कम करने के लिए refactor करने के लिए कोई स्थान नहीं हैं कर रहे हैं? क्या आपने पहले कुछ और करने से पहले रिफैक्टरिंग करने की कोशिश की है?
  2. क्या यह एक से अधिक ज़िम्मेदारी संभाला जा रहा है या एक अन्य पोस्टर ने कहा कि यह एक मुखौटा है?
  3. क्या कोड में निर्मित कई प्री-प्रोसेसिंग मैक्रोज़ हैं जिससे इसे "छोटा" बना दिया गया है, वास्तव में ऐसा लगता है?
  4. क्या कोई एसक्यूएल-प्रकार क्वेरी स्टेटमेंट बनाया जा रहा है? मैंने देखा है कि ये काफी बड़ी जगह लेते हैं और जल्दी ही खराब कोड गुणवत्ता के संकेतक के बिना एसएलओसी में जोड़ते हैं।
  5. इस कोड को कैसे समझाया गया है और किस समय दबाव में? कोड का इतिहास क्या है?मैंने केवल इस तरह के कोड को देखा है (और कुछ खुद को बनाया है) जब शेड्यूल निकट सीमा रेखा पागल हो गया है। शायद यह एक "... 6 दिनों में बनाया गया, 7 वें आराम करने के लिए" राक्षसी भीड़ की तरह लेकिन कभी तय नहीं किया गया था।
  6. क्या अन्य डेवलपर वास्तव में डेवलपर्स हैं?

रिएक्टर को छोड़कर आप यहां कोई सुझाव नहीं दे सकते हैं। जो भी कार्यक्षमता डी-आर-वाई का उल्लंघन करती है उसे ढूंढें और फिर इसे साफ़ करें।

1

मौजूदा कार्यान्वयन को बदलने के लिए किसी को भी विश्वास दिलाता है (विशेष रूप से यदि यह "यह काम करता है) आसान नहीं है।

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

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

+0

आप सही हैं, कक्षा काम करता है। यही कारण है कि लोग इसे छोड़ देते हैं और इसे जारी रखते हैं क्योंकि यह टीम में चीजों को करने का एक "सिद्ध" तरीका है। रखरखाव के लिए, मुझे यह कोड बनाए रखना था और यह वास्तव में मुश्किल है। मैंने पूरी कंपनी में यूनिट टेस्ट कभी नहीं देखा है। लोग शायद कहेंगे कि यूनिट टेस्ट करने से विकास धीमा हो जाएगा, लागत बढ़ेगी, व्यावहारिक नहीं है आदि। और मौजूदा कोड के साथ इकाई परीक्षण लिखना वाकई मुश्किल है। –

1

असल में उन लोगों को ओप्स पर ज्ञान नहीं है? प्रोजेक्ट शुरू करने से पहले ओओएडी करना मेरे अनुभव से बचने के लिए बेहतर विचार है, मैं कह सकता हूं कि प्रत्येक प्रोग्रामर को ओप्स पर ज्ञान नहीं है, इसलिए जाहिर है कि वे एक बेहतर कोड नहीं लिख सकते हैं।

यह जहां अंतर एक प्रोग्रामर के साथ आता है और analyst-

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