इसलिए यह असंभव होगा कि हम दूसरे ORM (जो हम चाहते थे) से बाहर हो जाएं।
जो गलत लगता है। रिपॉजिटरी पैटर्न का एक प्रमुख लाभ यह है कि आप डेटा एक्सेस लॉजिक को छिपाते हैं और यह आसानी से विनिमेय है।
अब तक ऐसा लगता है कि जैसे मैंने अपने डोमेन मॉडल में अपना व्यावसायिक तर्क रखा है और रिपॉजिटरी के माध्यम से मैं ओआरएम (जो कभी चुना था) के साथ काम करूंगा। हालाँकि, यदि मैं अनुप्रयोग के ORM भाग के लिए MDA उपकरण का उपयोग जारी रखना चाहता था, तो यहाँ बनाया गया मॉडल बहुत ही एनीमिक होगा (अर्थात इसमें कोई व्यावसायिक तर्क नहीं होगा)। इसी तरह अगर मैंने अपने ORM के लिए Entity फ्रेमवर्क (.net) या NHibernate का उपयोग किया है तो यह भी एक एनेमिक मॉडल होगा। मुझे यकीन नहीं है कि अगर आप अभी एनएचबर्नेट का इस्तेमाल करते हैं तो आप व्यापारिक तर्क कहाँ रखेंगे।
एनीमिक डोमेन मॉडल को कई लोगों द्वारा गलत व्यवहार माना जाता है, उदाहरण के लिए मार्टिन फाउलर। आपको इस तरह के डिजाइन से बचना चाहिए क्योंकि इस तरह का मॉडल एक अच्छी वस्तु उन्मुख डिजाइन के बजाय प्रक्रियात्मक डिजाइन तकनीकों की ओर जाता है। फिर आपके पास डेटा कक्षाएं और प्रबंधक / प्रसंस्करण कक्षाएं हैं जिसका अर्थ है कि आपने राज्य और व्यवहार को अलग कर दिया है। लेकिन एक वस्तु वास्तव में "राज्य और व्यवहार" होना चाहिए ।
NHibernate अज्ञानता अज्ञानता पर एक महान काम करता है। आप XML में या फ्लुएंनहाइबरनेट के साथ मैपिंग विवरण छिपा सकते हैं और केवल सादे POCO लिख सकते हैं। NHibernate के साथ एक समृद्ध डोमेन मॉडल बनाना बहुत आसान है। मुझे लगता है कि आप इकाई ढांचे और एमडीए उपकरण के साथ भी ऐसा कर सकते हैं। जब तक यह उपकरण आंशिक कक्षाओं का उत्पादन करता है तब तक आप बिना किसी चिंता के उत्पन्न कोड को आसानी से बढ़ा सकते हैं ताकि नई पीढ़ी आपके उपयोगकर्ता-लिखित कोड को नष्ट कर सके।
इस लंबी कहानी को छोटा करने के लिए। जब आप NHibernate का उपयोग करते हैं, तो कुछ भी नहीं, मैं कुछ भी नहीं दोहराता , आपको एक अमीर डोमेन मॉडल को गले लगाने से रोकता है। मैं इसे FluentNHibernate और हाथ से मैपिंग के साथ उपयोग करने की सलाह देता हूं। मैपिंग कोड लिखने में केवल 5 से 10 मिनट लगते हैं। मुझे लगता है कि इकाई ढांचे के लिए बहुत ही सही है और इसके उपकरण कम से कम आंशिक कक्षाएं बनाते हैं जो आसानी से एक्स्टेंसिबल हैं।
क्या मैं इस तरह से सोचने के लिए सही हूं, दूसरे शब्दों में डीडीडी के साथ डोमेन में सभी व्यापारिक तर्क और बस रिपॉजिटरी के माध्यम से दृढ़ता के लिए ओआरएम का उपयोग करें?
अधिकांश भाग के लिए आप सही हैं। आपके पास एक समृद्ध डोमेन मॉडल होना चाहिए। खासकर जब चीजें अधिक से अधिक जटिल हो जाती हैं, तो जब आप इसे ठीक से डिज़ाइन करते हैं, तो इसे बनाए रखना और विस्तारित करना आसान होता है। लेकिन ध्यान रखें कि डीडीडी को भी पता है (डोमेन लेयर और एप्लिकेशन लेयर) सेवाओं को व्यावसायिक तर्क और कारखानों को लागू करने के लिए रचनात्मक तर्क को लागू करना है।
मैं डोमेन लॉजिक और वास्तविक एप्लिकेशन बिजनेस लॉजिक में व्यावसायिक तर्क को अलग करता हूं। डोमेन लॉजिक यह है कि एप्लिकेशन लॉजिक के दौरान डोमेन कैसे इंटरैक्ट करता है और व्यवहार करता है, जो एक पूरी तरह से अलग परत है, यह एनकैप्सूलेट करता है कि डोमेन का उपयोग विशिष्ट उपयोग के मामले / एप्लिकेशन के लिए कैसे किया जाता है। कई बार मुझे विशिष्ट उपयोग के मामलों का समर्थन करने और इसे और अधिक शक्तिशाली बनाने के लिए डोमेन मॉडल को अपडेट करना पड़ता है।