Domain Driven Design (DDD) क्या है? [बन्द है]


276

मैं डीडीडी (डोमेन ड्रिवेन डिज़ाइन) को लेखों में बहुत इस्तेमाल करता हुआ देख रहा हूं - मैंने डीडीडी के बारे में विकिपीडिया प्रविष्टि पढ़ी है, लेकिन फिर भी यह पता नहीं लगा सकता कि यह वास्तव में क्या है और मैं इसे अपनी साइट बनाने में कैसे लागू करूँगा?

जवाबों:


595

सबसे पहले, यदि आप नहीं जानते कि आपको इसकी आवश्यकता है तो यह संभव है कि आपको इसकी आवश्यकता न हो। यदि आप उन समस्याओं को नहीं पहचानते हैं जो DDD हल करती हैं तो शायद आपके पास वे समस्याएं नहीं हैं। यहां तक ​​कि डीडीडी अधिवक्ता अक्सर इंगित करेंगे कि डीडीडी केवल बड़े (> 6 महीने) परियोजनाओं के लिए है।

यह मानते हुए कि आप अभी भी इस बिंदु पर पढ़ रहे हैं, मेरा डीडीडी इस पर है:

DDD आपके सॉफ़्टवेयर को वास्तविक-विश्व प्रणाली या प्रक्रिया का एक मॉडल बनाने की कोशिश कर रहा है। DDD का उपयोग करने के लिए, आप एक डोमेन विशेषज्ञ के साथ मिलकर काम करने के लिए होते हैं जो यह समझा सकता है कि वास्तविक-दुनिया प्रणाली कैसे काम करती है। उदाहरण के लिए, यदि आप एक ऐसी प्रणाली विकसित कर रहे हैं जो घोड़े की दौड़ पर दांव लगाने का काम करती है, तो आपका डोमेन विशेषज्ञ एक अनुभवी सट्टेबाज हो सकता है।

अपने और डोमेन विशेषज्ञ के बीच, आप एक सर्वव्यापी भाषा (यूएल) का निर्माण करते हैं , जो मूल रूप से सिस्टम का एक वैचारिक विवरण है। विचार यह है कि आपको यह लिखने में सक्षम होना चाहिए कि सिस्टम इस तरह से क्या करता है कि डोमेन विशेषज्ञ इसे पढ़ सकें और सत्यापित कर सकें कि यह सही है। हमारे सट्टेबाजी उदाहरण में, सर्वव्यापी भाषा में 'रेस', 'बेट', 'ऑड्स' आदि जैसे शब्दों की परिभाषा शामिल होगी।

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

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

डीडीडी भी कई पैटर्न सुझाता है:

  • रिपॉजिटरी , दृढ़ता के लिए एक पैटर्न (आमतौर पर एक डेटाबेस से / अपने डेटा को सहेजना और लोड करना)
  • फैक्टरी , वस्तु निर्माण के लिए एक पैटर्न
  • सेवा, उन वस्तुओं को बनाने के लिए एक पैटर्न जो आपके मुख्य डोमेन ऑब्जेक्ट को स्वयं डोमेन का हिस्सा न होकर हेरफेर करते हैं

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


33
वाह ... क्या शानदार जवाब! बहुत सराहना की और सबसे अच्छी व्याख्या मैंने एक मील तक कहीं भी पढ़ी है। धन्यवाद .. मैं कल वह पुस्तक डाउनलोड करूँगा।
लीने 3o

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

6
ईमानदार होने के लिए, यह बहुत ज्यादा हर प्रोजेक्ट की तरह लगता है जहां डेवलपर्स एक महीने से अधिक समय तक आर्किटेक्ट के साथ सहयोग करते हैं। (खैर, मेरे अनुभव के अनुसार कम से कम।) कौन सा एहसास मुझे आपके उत्तर की और भी सराहना करता है। :)
जारोस्लाव ज़ुराबा

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

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

51

उदाहरण के तौर पर StackOverflow को लें। कुछ वेब प्रपत्रों को डिज़ाइन करने के बजाय, आप पहले अपने समस्या डोमेन के भीतर संस्थाओं के ऑब्जेक्ट-ओरिएंटेड मॉडलिंग करने पर ध्यान केंद्रित करते हैं, उदाहरण के लिए उपयोगकर्ता, प्रश्न, उत्तर, वोट, टिप्पणियाँ आदि। क्योंकि डिज़ाइन समस्या के विवरण से प्रेरित है। डोमेन इसे डोमेन-संचालित डिज़ाइन कहा जाता है ।

आप एरिक इवांस की किताब में अधिक पढ़ सकते हैं ।


5
एरिक इवांस की किताब का एक संक्षिप्त संस्करण मुफ्त में उपलब्ध है
troelskn

समस्या यह है कि आपको किसी ऐसे व्यक्ति की ज़रूरत है जो डोमेन को पर्याप्त तरीके से समझे कि वे वेब पेजों का उपयोग करने से पहले कुछ उपयोगी कह सकें! जब यह मामला महान है !
इयान रिंगरोज

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

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

2
@RonenFestinger कृपया केवल इस उत्तर से DDD को न आंकें। एरिक इवांस की किताब में बहुत सारी जानकारियां हैं। उदाहरण के लिए बंधे हुए संदर्भ। बाउंडेड कॉन्टेक्स्ट प्रतिमान माइक्रोसर्विसेस के उन स्तंभों में से एक है जिन्हें हम आज बना रहे हैं। पुस्तक को पढ़ने से आपको माइक्रोसिस्टीवर्स को समझने में भी मदद मिलती है।
केरेम बद्दोआन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.