डोमेन संचालित डिज़ाइन में रिफैक्टिंग [बंद]


10

मैंने अभी एक प्रोजेक्ट पर काम करना शुरू किया है और हम डोमेन-संचालित डिज़ाइन का उपयोग कर रहे हैं (जैसा कि एरिक इवांस ने डोमेन-ड्रिवेन डिज़ाइन में परिभाषित किया है : सॉफ्टवेयर के दिल में जटिलता का सामना करना । मेरा मानना ​​है कि हमारी परियोजना निश्चित रूप से इस डिज़ाइन के लिए एक उम्मीदवार है। पैटर्न के रूप में इवांस ने अपनी पुस्तक में इसका वर्णन किया है।

मैं लगातार रिफैक्टिंग के विचार से जूझ रहा हूं।

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

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

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

क्या किसी ने डोमेन-संचालित डिज़ाइन को नियोजित करने वाले प्रोजेक्ट पर काम किया है? यदि हां, तो इस पर कुछ अंतर्दृष्टि प्राप्त करना बहुत अच्छा होगा। मैं विशेष रूप से कुछ सफलता की कहानियां सुनना चाहता हूं, क्योंकि DDD को सही होना बहुत मुश्किल है।

धन्यवाद!


यदि आप ऐसा कोड लिख रहे हैं जो आपको नहीं लगता कि आप कभी भी आकार की परवाह किए बिना बदल पाएंगे, तो रुकिए।
जेएफओ

@ जेफ़: यह इसे बदलने में सक्षम नहीं होने की बात नहीं है, यह समय और संसाधनों की बात है जो इसे बदलने के लिए आवश्यक है क्योंकि कोड बढ़ जाता है।
एंड्रयू व्हाइटेकर

2
यदि आप मौजूदा कोड को जानने के लिए कोड जोड़ रहे हैं, तो आपको फिर से तैयार करने की आवश्यकता है और आप जोखिम नहीं उठा रहे हैं। इसका मतलब यह नहीं है कि यह काम नहीं करेगा।
जेफ़ो

जवाबों:


9

मैं कुछ समय के लिए DDD का बड़ा प्रशंसक रहा हूं (परीक्षण ढांचे के सुरक्षा जाल के साथ और उसके बिना)।

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

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


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

एक विशेषता के रूप में दर्शाया गया वह एक है जिसे मैं याद रखूंगा।
फिलिप डुपनोविक

5

डोमेन संचालित डिजाइन में Refactoring मुझे लगता है कि एक जरूरत से प्रेरित है, न कि "अच्छा" रिफ्लेक्टर। जैसे ही आप एक गलत डोमेन मॉडल की पहचान करते हैं, कोड / सिस्टम वास्तविक दुनिया की समस्या का प्रतिनिधित्व नहीं कर रहा है।

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

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

कहानी को छोटा करने के लिए, हम 90% कहानियों को गलत मॉडल के साथ प्राप्त करने में सक्षम थे, लेकिन हम उस बिंदु पर पहुंच गए जहां कोड के प्रत्येक भाग में हम या तो नई दर को एक पुराने के रूप में लपेट रहे थे, और / या यदि नया बनाना है तो पुराने को फिर से पुराना करें जहां। हम लौकिक ईंट-पत्थर के खिलाफ अपना सिर पीट रहे थे। हम परियोजना के इस हिस्से के माध्यम से आधे रास्ते थे, और जानते थे कि पूरा करने का समय गलत डोमेन मॉडल के साथ घातीय या अयोग्य होगा। इसलिए हम बुलेट को बिट करते हैं, एक कहानी को आठ अन्य कहानियों में विभाजित करते हैं और डोमेन मॉडल को रिफैक्ट करते हैं।

जब हमने परियोजना को पूरा किया, तो हम जानते थे कि यह सही काम करना सही था, और इसे सही पाने के लिए केवल करना ही सही था।

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


बहुत बढ़िया जवाब। हम हर कुछ महीनों में ऐसा ही कुछ करते हैं। खुशी है कि हम अकेले नहीं हैं!
एंड्रयू व्हाइटेकर

3

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

इसका परिणाम यह हुआ कि लोग उन तरीकों से मॉडलिंग करते थे, जिनके लिए इसका इरादा नहीं था और इस तरह "काम करने के लिए इसे प्राप्त करने" का प्रयास करने के लिए मॉडल के अन्य हिस्सों को तोड़ दिया।

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


3

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

सवाल यह है: "क्या इन विकास की आवश्यकता होगी?"। कोर डोमेन में (वह क्षेत्र जो व्यावसायिक अंतर बना रहा है) उत्तर "हां!" है। क्योंकि उस डोमेन की व्यवसाय के बारे में अधिक चिंता है और वह जो हितधारकों के लिए एक फर्क पड़ेगा। वह स्थान जहां आप अपने डोमेन मॉडल के लचीलेपन के कारण न्यूनतम आवश्यकता के साथ अगली आवश्यकता को लागू करने के लिए अपने कोड को सही आकार में रखना चाहते हैं।

हालाँकि यह महंगा होने जा रहा है जब सभी एप्लिकेशन कोड पर लागू किया जाता है । वे क्षेत्र जो व्यवसाय के लिए महत्वपूर्ण नहीं हैं ( DDD लिंगो में सहायक या सामान्य उप-डोमेन ) कोर के लिए आरक्षित एक से कम परिष्कृत दृष्टिकोण की आवश्यकता हो सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.