Domain Driven Design क्या है?


199

क्या कोई समझा सकता है (संक्षिप्त शब्दों में) वास्तव में डोमेन संचालित डिजाइन क्या है? मैं इस शब्द को काफी देखता हूं लेकिन वास्तव में यह नहीं समझता कि यह क्या है या यह कैसा दिखता है। यह गैर-डोमेन संचालित डिज़ाइन से कैसे भिन्न होता है?

इसके अलावा, क्या कोई समझा सकता है कि एक डोमेन ऑब्जेक्ट क्या है? डोमेन सामान्य वस्तुओं से कैसे भिन्न होता है?




क्या इससे आपके सवाल का जवाब मिलता है? Domain Driven Design (DDD) क्या है?
सतपाल

जवाबों:


112

संपादित करें:

जैसा कि यह Google पर एक शीर्ष परिणाम लगता है और नीचे मेरा उत्तर नहीं है, कृपया इस बेहतर उत्तर को देखें:

https://stackoverflow.com/a/1222488/1240557

पुराने उत्तर (इतना पूरा नहीं :))

अच्छा सॉफ्टवेयर बनाने के लिए, आपको यह जानना होगा कि वह सॉफ्टवेयर क्या है। जब तक आप बैंकिंग के बारे में अच्छी समझ नहीं रखते हैं, तब तक आप एक बैंकिंग सॉफ्टवेयर सिस्टम नहीं बना सकते हैं, किसी को बैंकिंग के क्षेत्र को समझना चाहिए।

से: एरिक इवांस द्वारा डोमेन संचालित डिज़ाइन।

यह पुस्तक DDD का वर्णन करने का एक बहुत अच्छा काम करती है।

पुस्तक का सारांश डाउनलोड करने के लिए रजिस्टर करें , या सारांश को सीधे डाउनलोड करें


वह मिनी संस्करण एक उत्कृष्ट संदर्भ है और मुझे हाथ पर पूर्ण पाठ की एक प्रति के साथ भी यह उपयोगी लगता है। मैं आम तौर पर पहले इसे और फिर पाठ को और अधिक विस्तार के लिए जाता हूं।
Kyri Sarantakos

15
तो मैं इसे "इस पुस्तक को पढ़ता हूं" उत्तर से लेता हूं कि केवल कुछ पैराग्राफ में डीडीडी को संक्षेप में प्रस्तुत करना असंभव है? एक डिज़ाइन दर्शन इतना जटिल कैसे हो सकता है?
रॉबिन विंसलो

मैं यह नहीं कहूंगा कि यह असंभव है, लेकिन मैंने सोचा कि इसके बारे में पढ़ने के लिए बेहतर स्थान हैं और एरिक इवांस की पुस्तक इसके लिए सबसे अच्छा स्रोत है, इसलिए यहाँ नकल क्यों?
मिकेल bergstberg

7
प्रिय पाठक: यदि आप, मेरी तरह, शीर्ष Google परिणाम से यहां पहुंचे और स्वीकार किए गए उत्तर को देखकर निराश हो गए तो (क्षमा याचना, मिकेल) डर नहीं, एसओ पर यहां अधिक संतोषजनक स्पष्टीकरण हैं: stackoverflow.com/aa2242488 / 1240557
क्राइगर

3
वहां, मैंने लिंक के साथ अपना उत्तर अपडेट कर दिया है। यह एक बेहतर जवाब था। धन्यवाद!
मिकेल bergstberg

42

डोमेन ड्रिवेन डिज़ाइन जटिल सिस्टम के विकास के लिए एक कार्यप्रणाली और प्रक्रिया का नुस्खा है, जिसका फोकस किसी समस्या डोमेन के भीतर गतिविधियों, कार्यों, घटनाओं और डेटा की मैपिंग है, जो एक समाधान डोमेन की प्रौद्योगिकी कलाकृतियों में है।

डोमेन ड्रिवेन डिज़ाइन का जोर समस्या डोमेन के एक सार मॉडल को बनाने के लिए समस्या डोमेन को समझना है जो तब प्रौद्योगिकियों के एक विशेष सेट में लागू किया जा सकता है। डोमेन ड्रिवेन डिज़ाइन एक कार्यप्रणाली के रूप में यह मॉडल विकास और प्रौद्योगिकी विकास कैसे एक प्रणाली में परिणाम दे सकता है के लिए दिशा निर्देश प्रदान करता है जो समस्या डोमेन में परिवर्तन के चेहरे पर मजबूत होने के साथ-साथ इसका उपयोग करने वाले लोगों की जरूरतों को पूरा करता है।

Domain Driven Design की प्रक्रिया पक्ष में डोमेन विशेषज्ञों, समस्या डोमेन जानने वाले लोगों और डिज़ाइन / आर्किटेक्चर विशेषज्ञों, समाधान डोमेन जानने वाले लोगों के बीच सहयोग शामिल है। इस विचार का साझा भाषा के साथ एक साझा मॉडल है, ताकि इन दो अलग-अलग डोमेन के लोग अपने दो अलग-अलग दृष्टिकोणों के साथ उस समाधान पर चर्चा करें जो वे वास्तव में साझा अवधारणाओं के साथ एक साझा ज्ञान आधार पर चर्चा कर रहे हैं।

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

यह ऑब्जेक्ट मॉडल होने से अधिक है। फोकस वास्तव में साझा संचार और सहयोग में सुधार के बारे में है ताकि समस्या डोमेन के भीतर की वास्तविक जरूरतों को खोजा जा सके और उन जरूरतों को पूरा करने के लिए एक उपयुक्त समाधान तैयार किया जा सके।

डोमेन-संचालित डिज़ाइन: द गुड एंड द चैलेंजिंग इस टिप्पणी के साथ एक संक्षिप्त अवलोकन प्रदान करता है:

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

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

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

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

उन छोटे दिनों में हमें पूरे व्यवसाय का एक एकीकृत मॉडल बनाने की सलाह दी गई थी, लेकिन DDD ने माना कि हमने सीखा है कि "किसी बड़ी प्रणाली के लिए डोमेन मॉडल का कुल एकीकरण संभव नहीं होगा या लागत-प्रभावी" 1 । इसलिए इसके बजाय DDD एक बड़ी प्रणाली को बाउंडेड कॉन्टेक्ट्स में विभाजित करता है, जिनमें से प्रत्येक में एक एकीकृत मॉडल हो सकता है - अनिवार्य रूप से मल्टीपलऑनिकल मैडल को संरचित करने का एक तरीका।


20

आप केवल कर सकते हैं समझने के पहले समझने द्वारा डोमेन संचालित डिजाइन क्या निम्नलिखित हैं:

डोमेन क्या है?

वह क्षेत्र जिसके लिए एक सिस्टम बनाया गया है। हवाई अड्डा प्रबंधन, बीमा बिक्री, कॉफी की दुकानें, कक्षीय उड़ान, आप इसे नाम देते हैं।

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

मॉडल क्या है?

"हाथ में समस्या के लिए एक उपयोगी सन्निकटन।" - गेरी सुस्मान

एक कर्मचारी वर्ग एक वास्तविक कर्मचारी नहीं है। यह एक वास्तविक कर्मचारी का मॉडल है। हम जानते हैं कि मॉडल वास्तविक कर्मचारियों के बारे में सब कुछ कैप्चर नहीं करता है, और यह बात नहीं है। यह केवल वर्तमान संदर्भ के लिए हम जो रुचि रखते हैं उसे पकड़ने के लिए है।

अलग-अलग डोमेन एक ही चीज़ को मॉडल करने के लिए अलग-अलग तरीकों से दिलचस्पी ले सकते हैं। उदाहरण के लिए, वेतन विभाग और मानव संसाधन विभाग विभिन्न तरीकों से कर्मचारियों को मॉडल कर सकते हैं।

डोमेन मॉडल क्या है?

एक डोमेन के लिए एक मॉडल।

Domain-Driven Design (DDD) क्या है?

यह एक विकास दृष्टिकोण है जो डोमेन मॉडल को गहराई से महत्व देता है और इसे कार्यान्वयन से जोड़ता है। डीडीडी को गढ़ा गया और शुरू में एरिक इवांस द्वारा विकसित किया गया था।

से चुनी गई यहाँ


12

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

उम्मीद है की वो मदद करदे।


4

जैसा कि टीडीडी और बीडीडी में आप / टीम कोड कार्यान्वयन की तुलना में प्रणाली के परीक्षण और व्यवहार पर सबसे अधिक ध्यान केंद्रित करते हैं।

इसी तरह से जब सिस्टम एनालिस्ट, प्रोडक्ट ओनर, डेवलपमेंट टीम और कोड को कोड करते हैं - इकाइयाँ / क्लासेस, वैरिएबल्स, फ़ंक्शंस, यूजर इंटरफेस प्रॉसेस उसी भाषा का उपयोग करते हुए संवाद करते हैं, जिसका नाम डोमेन ड्रिवेन डिज़ाइन है।

DDD एक विचार प्रक्रिया है। सॉफ्टवेयर के एक डिजाइन को मॉडलिंग करते समय आपको डेटा संरचनाओं, डेटा प्रवाह, प्रौद्योगिकी, आंतरिक और बाहरी निर्भरताओं के बजाय व्यापार डोमेन / प्रक्रिया को ध्यान के केंद्र में रखने की आवश्यकता होती है।

डीडीडी का उपयोग करके मॉडल सिस्टर्म के कई दृष्टिकोण हैं

  • इवेंट सोर्सिंग (सत्य के एकल स्रोत के रूप में घटनाओं का उपयोग करना)
  • संबंधपरक डेटाबेस
  • ग्राफ़ डेटाबेस
  • कार्यात्मक भाषाओं का उपयोग करना

डोमेन ऑब्जेक्ट:

बहुत भोले शब्दों में, एक वस्तु जो

  • व्यवसाय प्रक्रिया / प्रवाह के आधार पर नाम है
  • अपनी आंतरिक स्थिति पर पूर्ण नियंत्रण रखता है अर्थात राज्य में हेरफेर करने के तरीकों को उजागर करता है।
  • हमेशा इसके उपयोग के संदर्भ में सभी व्यावसायिक आक्रमणकारियों / व्यावसायिक नियमों को पूरा करें।
  • एकल जिम्मेदारी सिद्धांत का पालन करता है

टीडीडी - टेस्ट ड्रिवेन डेवलपमेंट
नितिन बाबरिया

BDD - व्यवहार
प्रवृत्त

DDD - डोमेन संचालित विकास
नितिन बाबरिया

DDD -> डोमेन संचालित डिज़ाइन ~ विकास ~
psaxton

4

DDD (डोमेन संचालित डिजाइन) एक परियोजना की आवश्यकताओं के विश्लेषण और इन आवश्यकताओं की जटिलता से निपटने के लिए एक उपयोगी अवधारणा है। हालांकि, लोग कक्षाओं और तालिकाओं के बीच संबंधों पर विचार करने के साथ इन आवश्यकताओं का विश्लेषण कर रहे थे और वास्तव में उनका डिजाइन डेटाबेस तालिकाओं पर आधारित था। रिश्ते पुराने नहीं हैं, लेकिन इसमें कुछ समस्याएं हैं:

  • जटिल आवश्यकताओं के साथ बड़ी परियोजनाओं में यह उपयोगी नहीं है, हालांकि यह छोटी परियोजनाओं के लिए डिजाइन का एक शानदार तरीका है।

  • जब आप किसी भी तकनीकी व्यक्ति के साथ काम नहीं कर रहे हैं जो कि वे नहीं करते हैं, तो तकनीकी अवधारणा नहीं है, यह संघर्ष हमारी परियोजना में कुछ बड़ी समस्याओं का कारण हो सकता है।

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

आम तौर पर डोमेन के लिए सरल परिभाषा मुख्य परियोजना है जो मालिकों और अन्य टीमों के लिए पैसा बनाती है।


1

मेरा मानना ​​है कि निम्न पीडीएफ आपको बड़ी तस्वीर देगा। एरिक इवांस द्वारा डोमेन संचालित डिज़ाइन

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


0

मैं दूसरों के उत्तरों को दोहराना नहीं चाहता, इसलिए, संक्षेप में मैं कुछ सामान्य गलतफहमी को समझाता हूं

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

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

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

  • यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग नहीं है। यह ज्यादातर समस्या को हल करने का तरीका है और ( कभी-कभी ) आपको अपने डोमेन मॉडल में OO पैटर्न (जैसे गैंग ऑफ़ फोर) का उपयोग करने की आवश्यकता नहीं है। केवल इसलिए कि इसे बिजनेस एक्सपर्ट्स द्वारा नहीं समझा जा सकता है (वे फैक्टरी, डेकोरेटर, ... के बारे में ज्यादा नहीं जानते हैं)। DDD में कुछ पैटर्न भी हैं (जैसे कि Transaction Script, Table Module) जो OO अवधारणाओं के अनुरूप 100% नहीं हैं।

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