बस इस तरह से सोचें, डोमेन मॉडल कुछ भी पर निर्भर नहीं होना चाहिए और इसमें कोई बुनियादी ढांचा कोड नहीं होना चाहिए। डोमेन मॉडल को क्रमशः या कुछ ओआरएम ऑब्जेक्ट्स से प्राप्त नहीं होना चाहिए या उन्हें साझा नहीं करना चाहिए। ये सभी बुनियादी ढांचे की चिंताओं हैं और उन्हें डोमेन मॉडल से अलग परिभाषित किया जाना चाहिए।
लेकिन, यदि आप शुद्ध डीडीडी के लिए जा रहे हैं और आपके प्रोजेक्ट मूल्य स्केलेबिलिटी और प्रारंभिक विकास की गति पर प्रदर्शन की तलाश में हैं। कई बार, आपके "डोमेन मॉडल" के साथ बुनियादी ढांचे की चिंताओं को मिलाकर स्केलेबिलिटी की लागत पर गति में बढ़िया कदम प्राप्त करने में आपकी मदद मिल सकती है। मुद्दा यह है कि, आपको खुद से पूछना होगा, "विकास की गति में लागत के लायक शुद्ध डीडीडी के लाभ क्या हैं?"। यदि आपका उत्तर हाँ है, तो यहां आपके प्रश्न का उत्तर दिया गया है।
चलो एक उदाहरण के साथ शुरू करें जहां आपका एप्लिकेशन डोमेन मॉडल से शुरू होता है और ऐसा होता है कि डेटाबेस में टेबल आपके डोमेन मॉडल से बिल्कुल मेल खाते हैं। अब, आपका आवेदन छलांग और सीमा से बढ़ता है और डेटाबेस से पूछताछ करते समय आप प्रदर्शन समस्याओं का अनुभव करना शुरू कर देते हैं। आपने कुछ अच्छी तरह से सोचा इंडेक्स लागू किया है, लेकिन आपकी टेबल इतनी तेज़ी से बढ़ रही हैं कि ऐसा लगता है कि आपको बस अपने डेटाबेस को बनाए रखने के लिए सामान्यीकृत करने की आवश्यकता हो सकती है।तो, एक डीबीए की मदद से, आप एक नए डेटाबेस डिज़ाइन के साथ आते हैं जो आपकी प्रदर्शन आवश्यकताओं को संभालेगा, लेकिन अब टेबल पहले से ही अलग तरीके से अलग हैं और अब आपके डोमेन इकाइयों के भाग कई तालिकाओं में फैले हुए हैं यह प्रत्येक इकाई के लिए एक टेबल होने की तुलना में।
यह केवल एक उदाहरण है, लेकिन यह दर्शाता है कि आपका डोमेन मॉडल आपके दृढ़ता मॉडल से अलग क्यों होना चाहिए। इस उदाहरण में, आप दृढ़ता मॉडल डिज़ाइन में किए गए परिवर्तनों से मेल खाने के लिए अपने डोमेन मॉडल के वर्गों को तोड़ना नहीं चाहते हैं और अनिवार्य रूप से अपने डोमेन मॉडल का अर्थ बदल सकते हैं। इसके बजाय, आप अपने नए दृढ़ता मॉडल और डोमेन मॉडल के बीच मैपिंग को बदलना चाहते हैं।
इन डिज़ाइनों को आपातकालीन डीबी परिवर्तनों में स्केलेबिलिटी, प्रदर्शन और प्रतिक्रिया समय जैसे अलग रखने के कई फायदे हैं, लेकिन आपको उन्हें शुरुआती विकास की लागत और गति के विरुद्ध वजन करना चाहिए। आम तौर पर, जिन परियोजनाओं को अलगाव के इस स्तर से सबसे अधिक लाभ मिलेगा वे बड़े पैमाने पर उद्यम अनुप्रयोग हैं। टिप्पणीकारों
सॉफ्टवेयर विकास की दुनिया में लिए
अद्यतन, कई संभावित समाधान वां नंबर है। इस वजह से, लचीलापन और विकास की प्रारंभिक गति के बीच एक अप्रत्यक्ष व्यस्त संबंध मौजूद है। एक साधारण उदाहरण के रूप में, मैं कक्षा में हार्ड कोड तर्क कर सकता था या मैं एक कक्षा लिख सकता था जो गतिशील तर्क नियमों को पारित करने की अनुमति देता है। पूर्व विकल्प में विकास की उच्च गति होगी, लेकिन कम लचीलापन की कीमत पर। उत्तरार्द्ध विकल्प में लचीलापन की उच्च डिग्री होगी, लेकिन विकास की निचली गति की लागत पर। यह प्रत्येक कोडिंग भाषा के भीतर सच है क्योंकि संभावित समाधानों की हमेशा संख्या संख्या है।
कई टूल उपलब्ध हैं जो आपकी प्रारंभिक विकास गति और लचीलापन बढ़ाने में आपकी सहायता करते हैं। उदाहरण के लिए, एक ओआरएम उपकरण आपके डेटाबेस एक्सेस कोड के लिए विकास की गति को बढ़ा सकता है जबकि आपको ओआरएम का समर्थन करने वाले विशिष्ट डेटाबेस कार्यान्वयन को चुनने के लिए लचीलापन भी प्रदान करता है। आपके परिप्रेक्ष्य से, यह उपकरण और लागत की लचीलापन दोनों समय में शुद्ध लाभ है (जिनमें से कुछ मुक्त हैं) जो कि आपके मूल्य के सापेक्ष विकास समय की लागत के आधार पर आपके लिए लायक हो सकता है या नहीं व्यावसायिक आवश्यकता।
लेकिन, कोडिंग शैलियों में इस बातचीत के लिए, जो अनिवार्य रूप से डोमेन ड्राइव डिज़ाइन है, आपको उस उपकरण को लिखने के लिए उस समय के लिए जिम्मेदार होना होगा जिसका आप उपयोग कर रहे हैं। यदि आप उस ओआरएम उपकरण को लिखना चाहते थे या यहां तक कि अपने डेटाबेस एक्सेस लॉजिक को इस तरह से लिखना चाहते थे कि यह आपके द्वारा प्रदान किए जाने वाले सभी कार्यान्वयनों का समर्थन करता है, तो आप उस योजना के मुकाबले बहुत अधिक समय ले सकते हैं उपयोग करने पर
संक्षेप में, उपकरण आपको अपने समय को लचीलापन के उत्पादन और कीमत के लिए ऑफसेट करने में मदद कर सकते हैं, अक्सर उस समय की लागत को वितरित करने वाले उपकरण को खरीदने के लिए। लेकिन, उपकरण का उपयोग करने वाले कोड सहित कोई भी कोड गति/लचीलापन संबंध से प्रभावित रहेगा। इस तरह, डोमेन ड्राइव डिज़ाइन अधिक लचीलापन की अनुमति देता है अगर आप अपने व्यापार तर्क, डेटाबेस पहुंच, सेवा पहुंच, और यूआई कोड को एक साथ जोड़ते हैं, लेकिन उत्पादन के समय की लागत पर। डोमेन संचालित डिज़ाइन एंटरप्राइज़ स्तर के अनुप्रयोगों को छोटे अनुप्रयोगों से बेहतर सेवा प्रदान करता है क्योंकि एंटरप्राइज़ स्तर के अनुप्रयोगों के पास व्यावसायिक मूल्य के संबंध में शुरुआती विकास समय के लिए अधिक लागत होती है और क्योंकि वे अधिक जटिल होते हैं, वे परिवर्तन के लिए भी अधिक विषय होते हैं और अधिक लचीलापन की आवश्यकता होती है समय में कम लागत।
यहां एक पोस्ट है जिसे मैंने इस सटीक विषय पर लिखा है: http://enterprisecraftsmanship.com/2016/04/05/having-the-domain-model-separate-from-the-persistence-model/ – Vladimir