प्रबंधनीय विखंडू में भारी कोड को तोड़ने का सबसे अच्छा तरीका है?


13

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

मैं इस कमजोरी के कारण रिफैक्टिंग में वास्तव में अच्छा हूँ। और मैं हमेशा अपनी वस्तुओं को छोटे, अधिक प्रबंधनीय लोगों में विघटित करने की कोशिश करता हूं। इस कमजोरी ने शायद मुझे चीजों को ठीक से डिजाइन करने के लिए बहुत अधिक ध्यान देने के लिए प्रेरित किया है।

मुझे पता है कि अगर मैं अपनी समस्याओं को छोटे लोगों में बदल सकता हूं, तो मैं आसानी से पूरा कर पाऊंगा। एक रणनीति जो दिमाग में आती है वह है परीक्षण-संचालित विकास। मैं और क्या कर सकता हुँ?


2
"मैं हमेशा अपनी वस्तुओं को छोटे, अधिक प्रबंधनीय लोगों में विघटित करने की कोशिश करता हूं" और "मुझे पता है कि अगर मैं अपनी समस्याओं को छोटे लोगों में तोड़ सकता हूं, तो मैं आसानी से पूरा करने में सक्षम हो जाऊंगा" अपने प्रश्न को थोड़ा बयानबाजी करें।
मॉर्गन हेरलॉकर

2
रीफैक्टरिंग (फाउलर) और डिज़ाइन पैटर्न (GoF) पढ़ें । यह प्रश्न वास्तव में पूछ रहा है "मैं कोड कैसे बनाऊं?" और यदि आप पूछ रहे हैं कि, आपको यात्रा करने के लिए एक लंबी सड़क मिल गई है ; एक भी क्यू एंड ए धागे पर भरोसा मत करो कि तुम वहाँ भी आधे रास्ते दे।
एरोन ने

जवाबों:


13

कोड के बारे में सोचना बंद करो

परतों, सुविधाओं, मॉड्यूल, सेवाओं और अन्य उच्च-स्तरीय अमूर्तताओं के बारे में सोचना शुरू करें

आप अभिभूत हो रहे हैं क्योंकि आप बहुत कम स्तर पर सोच रहे हैं


9

जटिल को सरल बनाना आसान है ; प्रतीक्षा करें कि यह दूसरा तरीका है।

हर कोई इसके साथ संघर्ष करता है, कोई सीधा समाधान नहीं है जिसमें अत्यधिक प्रभावशीलता हो।

चूंकि आपने इसे अपने प्रश्नों में सूचीबद्ध नहीं किया था, इसलिए मेरा सुझाव यह होगा:

इसके माध्यम से कार्यात्मक सामंजस्य पर ध्यान दें :

एकल जिम्मेदारी सिद्धांत कहता है कि प्रत्येक वस्तु की एक ही जिम्मेदारी होनी चाहिए, और यह जिम्मेदारी पूरी तरह से कक्षा द्वारा पूरी की जानी चाहिए। इसकी सभी सेवाओं को उस जिम्मेदारी के साथ संरेखित किया जाना चाहिए।

यदि आप इसे पहले पृष्ठ पर परिणामों के बीच में रखते हैं, तो आपको दो महान संसाधन मिलेंगे:

  • रॉबर्ट सी। मार्टिन (फरवरी / 2002) द्वारा " सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल ": यह सिद्धांत विभिन्न वर्गों में अलग-अलग कारणों से बदलने वाली चीजों को रखने की आवश्यकता पर चर्चा करता है।
  • जेफ एटवुड (Mar / 2007) द्वारा " कर्लीज लॉ: डू वन थिंग ": सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल का कहना है कि एक वर्ग में एक होना चाहिए, और केवल एक, बदलने का कारण।

कंप्यूटर विज्ञान में सामंजस्य क्या है?

सामंजस्य एक माप है कि किसी एकल मॉड्यूल की जिम्मेदारियों को कितनी दृढ़ता से संबंधित या केंद्रित किया जाता है। जैसा कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए लागू किया जाता है, अगर दिए गए वर्ग की सेवा करने वाले तरीके कई पहलुओं में समान होते हैं, तो कक्षा को उच्च सामंजस्य रखने के लिए कहा जाता है। एक अत्यधिक सामंजस्यपूर्ण प्रणाली में, कोड की पठनीयता और पुन: उपयोग की संभावना बढ़ जाती है, जबकि जटिलता को प्रबंधनीय रखा जाता है।

सामंजस्य कम हो जाता है अगर : - एक वर्ग में एम्बेडेड कार्यप्रणाली, इसके तरीकों के माध्यम से पहुँचा, आम में बहुत कम है। - तरीके कई विविध गतिविधियों को अंजाम देते हैं, अक्सर डेटा के मोटे-मोटे या असंबद्ध सेटों का उपयोग करते हैं।

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

अगर आपका कोई प्रश्न है तो मुझे बताएं।


1

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


1

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


0

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

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


2
मैं देख रहा हूं कि आप कहां से आ रहे हैं और मेरा एक हिस्सा आपके साथ सहमत है, लेकिन मैं मदद नहीं कर सकता, लेकिन लगता है कि थोड़ा पराजित है। हां, कोई जादू की गोली नहीं है जो एक खराब प्रोग्रामर को एक अच्छे में बदल देगी, लेकिन अनुभव के माध्यम से, लक्षित सीखने और काम किए गए सुधार का ईमानदार मूल्यांकन होता है। कितनी जल्दी और कहाँ पठार व्यक्ति पर निर्भर करता है, लेकिन मुझे लगता है कि यह बहुत कुछ प्रेरणा के बारे में है।

1
+1 @ एक गाय का मुंह: सहमत हैं, और ऐसा ही Google के अनुसंधान निदेशक पीटर नॉरविग करते हैं , जो एक "उत्कृष्ट" प्रोग्रामर हैं: दस साल में खुद को प्रोग्रामिंग सिखाएं
ब्लंडर्स

1
@blunders - एक अच्छा लेख। यह गंदा छोटा रहस्य है जो विपणन पुरुष हमें बताना नहीं चाहते (सिगा के अलावा)। अभ्यास, अभ्यास, अभ्यास। माना जाता है कि यह जापानी के लिए भी काम करता है alljapaneseallthetime.com/blog

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

0

मुझे लगता है कि बहुत सारे लोग ओवर-इंजीनियर समाधान की कोशिश करते हैं। वे "एडम एंड ईव" दृष्टिकोण लेते हैं जब बस थोड़ा और अधिक व्यावहारिक होता है जो बहुत कुछ करके चीजों को सरल करता है।

विशिष्ट कक्षाएं बुराई नहीं हैं, वे ध्वनि सॉफ़्टवेयर डिज़ाइन का स्वाभाविक परिणाम हैं।

कई प्रोग्रामर, मेरी राय में, यह समझने में विफल रहते हैं और ऐसी कोई पुस्तक नहीं है जो मुझे पता हो कि यह स्पष्ट रूप से स्पष्ट है।

एक और चीज जो निश्चित रूप से मदद करती है, वह है टीडीडी, जो आपको यह समझने में मदद करता है कि आप "कैसे" क्लास में प्रैक्टिस कर रहे हैं और कई मामलों में दिन बचा सकते हैं, क्योंकि यह दिन में शुरुआती समस्याओं / सीमाओं को दर्शाता है।

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

पैटर्न का एक बुद्धिमान उपयोग आपके द्वारा प्रबंधित विवरणों की मात्रा को बहुत कम कर देगा।

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

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

आशा है कि यह आप के लिए समझ में आता है!

एंड्रिया


वैसे, बस यह स्पष्ट करने के लिए: मैं जंगली वर्गों की तरह नहीं बढ़ रहा हूं, जो कि गार्मलिन की तरह बढ़ रहा है, बल्कि सिर्फ एक व्यावहारिक रूप से अधिक व्यावहारिक अर्थ :)
एंड्रिया रायमंडी

0

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

कुछ सरल कदम जिन्होंने मेरी मदद की है

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

इस बात के बारे में मैं भी वकालत कर रहा हूँ। मुझे लगता है कि अमूर्तता और विशेषज्ञता के बीच एक संतुलन होना चाहिए: बहुत अधिक विशेषज्ञता बहुत बुरा है जितना कि अमूर्तता।
एंड्रिया रायमोंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.