java - मुझे अपने कोड की संरचना की कल्पना कैसे करनी चाहिए?




schema uml (7)

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

जोड़े गए:

मैं दो संभावनाओं पर विचार करता हूं:

  1. हाथों से ग्राफ बनाना (स्पष्ट रूप से)।
  2. स्वचालित तरीके से ग्राफ बनाना। उदाहरण के लिए कुछ उपकरणों का उपयोग करना जो उपलब्ध कोड को पढ़ते हैं और कोड की संरचना का वर्णन करते हुए कुछ ग्राफ उत्पन्न करते हैं।

जोड़ा 2:

मुफ्त में कुछ लेना अच्छा होगा।


इसे कई फाइलों में स्टोर किया जाता है। यह विभिन्न तरीकों के साथ विभिन्न वर्गों का उपयोग करता है। कोड बड़ा और जटिल है।

स्कूल के बाहर लिखा गया सभी जावा कोड ऐसा है, विशेष रूप से एक प्रोजेक्ट पर शुरू होने वाले नए डेवलपर के लिए।

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

पूरे आवेदन को समझने की कोशिश मत करो

मुझे आपसे यह पूछना चाहिए - आप कोड को क्यों समझना चाहते हैं? संभवत: आप बग को ठीक कर रहे हैं या एप्लिकेशन की एक विशेषता बढ़ा रहे हैं। पहली बात जो आपको करने की कोशिश नहीं करनी चाहिए वह है कि पूरे आवेदन को समझना। किसी प्रोजेक्ट पर नए सिरे से शुरुआत करते हुए पूरी वास्तुकला को समझने की कोशिश करना आपको भारी पड़ेगा।

मेरा विश्वास करो जब मैं यह कहता हूं - 10+ वर्षों के ठोस कोडिंग अनुभव वाले डेवलपर्स को समझ में नहीं आता है कि एक वर्ष से अधिक समय तक एक ही परियोजना पर काम करने के बाद भी आवेदन के कुछ हिस्से कैसे काम करते हैं (यह मानते हुए कि वे मूल डेवलपर्स नहीं हैं)। वे यह नहीं समझ सकते हैं कि प्रमाणीकरण कैसे काम करता है या आवेदन में लेनदेन प्रबंधन कैसे काम करता है। मैं 1000 से 2000 कक्षाओं के साथ विशिष्ट उद्यम अनुप्रयोगों के बारे में बात कर रहा हूं और विभिन्न रूपरेखाओं का उपयोग कर रहा हूं।

बड़े अनुप्रयोगों को बनाए रखने के लिए आवश्यक दो महत्वपूर्ण कौशल

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

दो महत्वपूर्ण कौशल हैं जो उन्हें ऐसा करने में मदद करते हैं।

  1. वे बग को ठीक करते समय उनके द्वारा किए गए परिवर्तन के प्रभाव का विश्लेषण करने में सक्षम हैं। पहले वे समस्या का पता लगाते हैं, कोड बदलते हैं और यह सुनिश्चित करने के लिए परीक्षण करते हैं कि यह काम करता है। फिर, क्योंकि वे जावा भाषा को अच्छी तरह से जानते हैं और रूपरेखा 'अच्छी तरह से', वे बता सकते हैं कि क्या यह ऐप के किसी अन्य हिस्से को तोड़ देगा। यदि नहीं, तो वे किए जाते हैं।

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

लब्बोलुआब यह है, आपको यह समझने की ज़रूरत नहीं है कि सभी 2000 वर्ग एक बग को ठीक करने या ऐप को बढ़ाने के लिए क्या कर रहे हैं। बस समझ लें कि क्या जरूरत है।

तत्काल मूल्य पहुंचाने पर ध्यान दें

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

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

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

जब आप कुछ समझते हैं, तो नोट्स लिखें या कक्षा / अनुक्रम / डेटा मॉडल आरेख बनाएं।

आरेख

हाआ ... मुझे आरेखों का उल्लेख करने में इतना समय लगा :)। मैंने यह खुलासा करने के साथ शुरुआत की कि मैं मेनटेनज का लेखक हूं, वह टूल जो रनटाइम अनुक्रम आरेख बनाता है। मैं आपको बताता हूं कि यह आपकी मदद कैसे कर सकता है।

रखरखाव का बड़ा हिस्सा किसी समस्या के स्रोत का पता लगाना है या यह समझना है कि कोई विशेषता कैसे काम करती है।

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

यदि आपको किसी सुविधा को बढ़ाने की आवश्यकता है, तो अनुक्रम आरेख का उपयोग करके उस सुविधा के कॉल प्रवाह को समझें और फिर इसे बढ़ाएं। वृद्धि एक अतिरिक्त क्षेत्र को जोड़ने या एक नया सत्यापन जोड़ने आदि की तरह हो सकती है, आमतौर पर, नया कोड जोड़ना कम जोखिम भरा होता है।

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

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

ऊपर मेरे तर्क के लिए दो चेतावनी

  1. मैंने उल्लेख किया है कि मौजूदा कोड को बदलने की तुलना में कोड जोड़ना कम जोखिम भरा है। क्योंकि आप बदलने से बचना चाहते हैं, इसलिए आपको मौजूदा कोड को बदलने और मौजूदा कोड को बदलने के बजाय इसे जोड़ने के लिए लुभाया जा सकता है। इस प्रलोभन का विरोध करें। सभी अनुप्रयोगों की निश्चित संरचना या 'एकरूपता' होती है। कोड दोहराव जैसी बुरी प्रथाओं द्वारा इसे बर्बाद मत करो। आपको पता होना चाहिए कि आप कब 'एकरूपता' से भटक रहे हैं। परिवर्तनों की समीक्षा करने के लिए प्रोजेक्ट के वरिष्ठ डेवलपर से पूछें। यदि आपको कुछ ऐसा करना चाहिए जो सम्मेलनों का पालन नहीं करता है, तो कम से कम यह सुनिश्चित करें कि यह एक छोटे वर्ग के लिए स्थानीय है (200 लाइन वर्ग में एक निजी विधि आवेदन के सौंदर्यशास्त्र को बर्बाद नहीं करेगी)।

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

निष्कर्ष

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


आप JArchitect टूल का उपयोग कर सकते हैं, निर्भरता ग्राफ का उपयोग करके अपनी कोड संरचना की कल्पना करने के लिए एक बहुत ही संपूर्ण टूल, और CQlinq का उपयोग करके डेटाबेस की तरह सोर्स कोड ब्राउज़ कर सकते हैं। JArchitect ओपन सोर्स योगदानकर्ताओं के लिए निःशुल्क है


कुछ महान उपकरण जो मैं उपयोग करता हूं -

StarUML (कोड को आरेख रूपांतरण की अनुमति देता है)

एमएस Visio

एक्समिंड (सिस्टम के अवलोकन के लिए बहुत उपयोगी)

कलम और कागज़!


क्या आपने Google कोडप्रो एनेलेटिक्स की कोशिश की है?

यह उदाहरण के लिए निर्भरता प्रदर्शित कर सकता है और मुफ़्त है (cod.google.com से स्क्रीनशॉट):



यहां एक गैर-यूएमएल उपकरण है जिसमें बहुत अच्छा दृश्य विशेषताएं हैं।

आप आयतों के रंग / भुजाओं के लिए प्रति वर्ग / विधि की कोड की मैपिंग कर सकते हैं। आप कक्षाओं के बीच निर्भरता भी दिखा सकते हैं।

http://www.moosetechnology.org/

अच्छी बात यह है, आप जो आवश्यक है उसे प्रदर्शित करने के लिए स्मालटाक स्क्रिप्टिंग का उपयोग कर सकते हैं: http://www.moosetechnology.org/docs/faq/JavaModelManipulation

यहाँ आप देख सकते हैं कि ऐसा दृश्य कैसा दिखता है: http://www.moosetechnology.org/tools/moosejee/casestudy


आपके द्वारा उपयोग किया जाने वाला सबसे महत्वपूर्ण उपकरण आपका मस्तिष्क है, और यह मुफ़्त है।

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

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






code-visualization