चुस्त वातावरण में वास्तुशिल्प डिजाइन कैसे किया जाता है?


59

मैंने एजाइल आर्किटेक्ट के लिए सिद्धांत पढ़े हैं , जहां उन्होंने अगले सिद्धांतों को परिभाषित किया है:

सिद्धांत # 1 सिस्टम को कोड करने वाली टीम सिस्टम को डिजाइन करती है।
सिद्धांत # 2 सबसे सरल वास्तुकला का निर्माण करें जो संभवतः काम कर सकता है।
सिद्धांत # 3 जब संदेह हो, तो इसे कोड करें।
सिद्धांत # 4 वे इसका निर्माण करते हैं, वे इसका परीक्षण करते हैं।
सिद्धांत # 5 बड़ा सिस्टम, रनवे जितना लंबा।
सिद्धांत # 6 सिस्टम आर्किटेक्चर एक भूमिका सहयोग है।
सिद्धांत # 7 नवाचार पर कोई एकाधिकार नहीं है।

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

तो, सिस्टम डिज़ाइन कैसे किया जाता है? UML का उपयोग करना? या एक दस्तावेज जो इंटरफेस और प्रमुख ब्लॉकों को परिभाषित करता है? शायद कुछ और?


11
आप UML में "डिज़ाइन नहीं" करते हैं। आप डिजाइन करते हैं, और फिर आप इसे लिखने या संचार करने के लिए यूएमएल का उपयोग करते हैं।
tdammers

4
@tdammers: सटीक होने के लिए, आप इसे लिखने के लिए UML का उपयोग करने का प्रयास करते हैं और ध्यान देते हैं कि UML पर्याप्त नहीं है।
डॉक्टर ब्राउन

जवाबों:


77

डिस्क्लेमर: मैं एक चुस्त वातावरण में एक वास्तुकार हूं लेकिन, जैसा कि हेल्मथ वॉन मोल्टके द एल्डर कहते हैं, "कोई भी युद्ध योजना दुश्मन से संपर्क से नहीं बचती है"। दूसरे शब्दों में, व्यावहारिकता का अर्थ है कि दिशानिर्देशों के सटीक अक्षर का हमेशा पालन नहीं किया जा सकता है।

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

तो, सिस्टम डिज़ाइन कैसे किया जाता है? UML का उपयोग करना? या एक दस्तावेज जो इंटरफेस और प्रमुख ब्लॉकों को परिभाषित करता है? शायद कुछ और?

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

हर संगठन के पास वास्तुशिल्प डिजाइन के लिए अपने स्वयं के मानक हैं और यह कभी-कभी परियोजना से संगठन के भीतर भिन्न होता है। टीम से पहले या जितनी जल्दी हो सके कोडिंग शुरू करने से पहले और आमतौर पर इसमें शामिल (और पूरी सूची नहीं है):

  1. विस्तारित आवश्यकताओं और गुंजाइश परिभाषा। इनमें ऐसे मामलों या उपयोगकर्ता कहानियों का उपयोग किया जाता है जो उच्च स्तर की व्यावसायिक आवश्यकताओं को पूरा करते हैं। मैं व्यक्तिगत रूप से गैर-कार्यात्मक आवश्यकताओं के लिए आरएफसी 2119 का उपयोग करना पसंद करता हूं । डिजाइन पर आधारित है और इन पर वापस आ गए हैं। हालांकि यह डिजाइन की आम परिभाषा में फिट नहीं हो सकता है, ये अक्सर उतने ही महत्वपूर्ण होते हैं।
  2. एक उच्च स्तरीय नेटवर्क या घटक आरेख और पाठ के एक पृष्ठ से मिलकर एक अवलोकन। यह ऊपरी प्रबंधन से लेकर देव और क्यूए तक बहुत विस्तृत दर्शकों के लिए है। यह शायद ही कभी व्यापक दर्शकों के कारण यूएमएल या एक परिभाषित संकेतन का उपयोग करता है।
  3. व्यक्तिगत घटकों के लिए विवरण, अक्सर ऊपर बताए अनुसार उनके बीच के इंटरफेस या एपीआई पर ध्यान केंद्रित करते हैं। लक्ष्य भाषा में पूर्वनिर्धारण और उत्तर-पूर्व विवरण के साथ इंटरफेस को विधि हस्ताक्षर के रूप में निर्दिष्ट किया जा सकता है। घटकों में नेटवर्क आरेख हो सकते हैं, जैसे कि क्लाउड या डेटा सेंटर में VM का लेआउट दिखाना और उनकी नेटवर्किंग व्यवस्था। संबंधपरक डेटाबेस में आमतौर पर इकाई-संबंध चित्र होंगे।
  4. यदि ज्ञात हो तो वास्तु जोखिमों और उनके उपशमन की सूची। आवश्यकताओं की तरह, ये डिज़ाइन निर्णय और व्यापार-नापसंद प्रदर्शित करते हैं।

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

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


3
यह एक शानदार जवाब है कि एक चुस्त टीम में एक वास्तुकार की भूमिका क्या होनी चाहिए, हालांकि यह वास्तव में इस सवाल का जवाब नहीं देता है कि स्प्रिंट विकास शुरू होने से पहले सिस्टम डिज़ाइन क्या है और इसे करने के लिए सर्वोत्तम अभ्यास।
मेपल_शफ्ट

@maple_shaft मैंने डिज़ाइन में अधिक ध्यान केंद्रित करने के लिए अपने उत्तर का विस्तार किया है।
अकटन

3
इसके लायक क्या है, एक अन्य वास्तुकार के रूप में जो प्रमुख बहुराष्ट्रीय सेटिंग्स में कई वर्षों से चुस्त वातावरण में काम करता है, यह स्पॉट-ऑन है।
रेक्स एम।

12

डिस्क्लेमर: मैं एक फुर्तीला कोच / वास्तुकार नहीं हूं - यह मैंने फुर्तीली परियोजनाओं में देखा है जो मैंने काम किया है और मुझे लगता है कि यह अच्छी तरह से काम करता है।

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

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

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


0

जब आप परीक्षण संचालित विकास कर रहे हों, तो आप ऐसे टेस्टकोड बनाएँ, जो आपके मॉड्यूल को अलग-थलग कर दें (= यथासंभव अन्य मॉड्यूल के स्वतंत्र रूप में)

टेस्टिंगकोड के निर्माण को आसान बनाने के लिए आप अन्य मॉडल्स के लिए इंटरफेस शुरू करते हैं जिन्हें आसानी से मॉक किया जा सकता है।

इस तरह से एक पक्ष के रूप में आपको स्वचालित रूप से एक वास्तुकला मिलती है जहां मॉड्यूल के बीच युग्मन जितना संभव हो उतना छोटा होता है।

मेरी राय में tdd भी वास्तुशिल्प कार्य है।


हां, टीडीडी एक वास्तुशिल्प कार्य है, लेकिन एक सॉफ्टवेयर घटकों पर। मेरा प्रश्न वास्तव में है कि चुस्त सिद्धांतों का उपयोग करके एक बड़े पैमाने की परियोजना की वास्तुकला कैसे बनाई जाती है।
B24ови।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.