डीडीडी पर बहुत सारे ट्यूटोरियल जो मैंने अध्ययन किए हैं वे ज्यादातर सिद्धांत को कवर कर रहे हैं। उन सभी के पास अल्पविकसित कोड उदाहरण (Pluralsight और समान) हैं।
वेब पर EF के साथ DDD को कवर करने वाले ट्यूटोरियल बनाने के लिए कुछ लोगों द्वारा प्रयास भी किए जाते हैं। यदि आप उन्हें संक्षेप में अध्ययन करना शुरू करते हैं - आप जल्दी से नोटिस करते हैं कि वे एक दूसरे से बहुत भिन्न हैं। कुछ लोग ऐप को कम से कम रखने और अतिरिक्त परतों को पेश करने से बचने की सलाह देते हैं, जैसे कि EF के शीर्ष पर भंडार , अन्य निश्चित रूप से अतिरिक्त परतें उत्पन्न कर रहे हैं, अक्सर DbContextएग्रिगेट रूट्स में इंजेक्ट करके SRP का भी उल्लंघन करते हैं।
अगर मैं एक राय-आधारित प्रश्न पूछ रहा हूँ, तो मैं बहुत माफी माँग रहा हूँ, लेकिन ...
जब यह अभ्यास करने की बात आती है - एंटिटी फ्रेमवर्क सबसे शक्तिशाली और व्यापक रूप से उपयोग किए जाने वाले ओआरएम में से एक है। आप दुर्भाग्य से इसके साथ डीडीडी को कवर करने के लिए एक व्यापक पाठ्यक्रम नहीं पाएंगे।
महत्वपूर्ण पहलू:
एंटिटी फ्रेमवर्क UoW & Repository (
DbSet) बॉक्स से बाहर लाता हैEF के साथ आपके मॉडल में नेविगेशन गुण हैं
एफई के साथ मॉडल के सभी हमेशा से रहे हैं उपलब्ध बंद
DbContext(वे एक के रूप में प्रतिनिधित्व कर रहे हैंDbSet)
नुकसान:
आप गारंटी नहीं दे सकते कि आपके बच्चे मॉडल केवल एग्रीगेट रूट के माध्यम से प्रभावित होते हैं - आपके मॉडल में नेविगेशन गुण हैं और उन्हें संशोधित करना और कॉल करना संभव है
dbContext.SaveChanges()साथ
DbContextआप अपने हर मॉडल का उपयोग कर सकते हैं, इस प्रकार circumventing सकल रूटआप के माध्यम से जड़ वस्तु के बच्चों के लिए उपयोग को प्रतिबंधित कर सकते
ModelBuilderमेंOnModelCreatingविधि उन्हें फ़ील्ड के रूप में चिह्नित करके मैं अब भी यह DDD के बारे में जाने के लिए सही रास्ता है पर विश्वास नहीं है प्लस यह रोमांच की किस तरह यह भविष्य में पैदा हो सकती है मूल्यांकन करने के लिए मुश्किल है (- काफी उलझन में )
संघर्ष:
रिपॉजिटरी की एक और परत को लागू किए बिना जो एग्रीगेट को वापस लौटाती है हम उपर्युक्त नुकसानों को आंशिक रूप से हल नहीं कर सकते हैं
रिपॉजिटरी की एक अतिरिक्त परत को लागू करके हम ईएफ (हर
DbSetपहले से ही एक रेपो) की अंतर्निहित विशेषताओं को अनदेखा कर रहे हैं और ऐप को अधिक जटिल बना रहे हैं
मेरा निष्कर्ष:
कृपया मेरी अज्ञानता को क्षमा करें, लेकिन उपरोक्त जानकारी के आधार पर - यह या तो एंटिटी फ्रेमवर्क डोमेन-ड्रिवेन डिज़ाइन के लिए पर्याप्त नहीं है या डोमेन-ड्रिवेन डिज़ाइन एक अपूर्ण और अप्रचलित दृष्टिकोण है।
मुझे संदेह है कि प्रत्येक दृष्टिकोण की अपनी खूबियां हैं, लेकिन मैं अब पूरी तरह से हार गया हूं और डीडीडी के साथ ईएफ को कैसे सामंजस्य करना है इसका थोड़ा विचार नहीं है।
अगर मैं गलत हूं - तो कोई भी कम से कम निर्देशों का एक साधारण सेट (या यहां तक कि सभ्य कोड उदाहरण प्रदान कर सकता है) कैसे डीडीडी के बारे में ईएफ के साथ जाने के लिए, कृपया?