मैं एक लेनदेन स्क्रिप्ट की दुनिया से आया हूं और मैं अभी DDD पर एक नज़र रखना शुरू कर रहा हूं। मैं डेटाबेस दृढ़ता के साथ DDD डिज़ाइन को एकीकृत करने के सही तरीके से अनिश्चित हूं। यह वही है जो मेरे पास है:
OrganisationService नामक एक सेवा वर्ग जिसके इंटरफ़ेस में संगठन डोमेन ऑब्जेक्ट्स के इंस्टेंस को पुनर्प्राप्त करने और सहेजने के तरीके हैं। संगठन एक समग्र जड़ है और इससे संबंधित अन्य आंकड़े हैं: सदस्य और लाइसेंस। EF6 डेटाबेस पहले DBContext का उपयोग OrganisationService के भीतर OrganisationDB संस्थाओं और संबंधित सदस्यDB और लाइसेंसडीबी संस्थाओं को पुनः प्राप्त करने के लिए किया जाता है। ऑर्गनाइजेशन सर्विस द्वारा पुनर्प्राप्त और संगठन डोमेन ऑब्जेक्ट में लोड होने पर ये सभी अपने डोमेन ऑब्जेक्ट क्लास समकक्षों में बदल जाते हैं। यह ऑब्जेक्ट ऐसा दिखता है:
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
}
मैं ऑर्गनाइजेशन सर्विस में रिपोजिटरी पैटर्न का उपयोग नहीं कर रहा हूं ... मैं ईईएफ का उपयोग रिपॉजिटरी के रूप में ही कर रहा हूं क्योंकि ऐसा लगता है कि ईएफ 6 ने रिपॉजिटरी को अब बेमानी बना दिया है।
डिजाइन में इस बिंदु पर संगठन डोमेन ऑब्जेक्ट एनीमिक है: यह ईएफ पोको संगठन वर्ग जैसा दिखता है। OrganisationService वर्ग एक रिपॉजिटरी की तरह दिखता है!
अब मुझे तर्क जोड़ना शुरू करना होगा। इस तर्क में एक संगठन लाइसेंस और सदस्यों का प्रबंधन शामिल है। अब लेन-देन की स्क्रिप्ट के दिनों में मैं इन परिचालनों को संभालने के लिए ऑर्गनाइजेशन सर्विस में तरीके जोड़ूंगा और डीबी के साथ बातचीत करने के लिए रिपॉजिटरी में कॉल करूंगा, लेकिन डीडीडी के साथ मेरा मानना है कि इस तर्क को संगठन डोमेन ऑब्जेक्ट के भीतर ही समझाया जाना चाहिए ...
यह वह जगह है जहां मैं इस बात से अनिश्चित हूं कि मुझे क्या करना चाहिए: मुझे इस डेटा को तर्क के हिस्से के रूप में डेटाबेस में वापस रखना होगा। क्या इसका मतलब यह है कि मुझे ऐसा करने के लिए संगठन डोमेन ऑब्जेक्ट के भीतर DbContext का उपयोग करना चाहिए? क्या डोमेन ऑब्जेक्ट खराब अभ्यास के भीतर रिपॉजिटरी / ईएफ का उपयोग कर रहा है? यदि हां, तो यह दृढ़ता कहां से है?
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
public void AddLicensesToOrganisation(IList<License> licensesToAdd)
{
// Do validation/other stuff/
// And now Save to the DB???
using(var context = new EFContext())
{
context.Licenses.Add(...
}
// Add to the Licenses collection in Memory
Licenses.AddRange(licensesToAdd);
}
}
क्या मुझे इसके बजाय सिर्फ संगठन डोमेन ऑब्जेक्ट को मेमोरी में म्यूट करना चाहिए और फिर इसे ऑर्गनाइजेशन सर्विस को दृढ़ता के लिए वापस धकेलना चाहिए? तब मुझे ट्रैक करना होगा कि वास्तव में ऑब्जेक्ट पर क्या बदला गया है (जो कि ईएफ अपने स्वयं के पीओसीओ के लिए करता है! मुझे यह महसूस करने में आ रहा है कि ईएफ केवल रिपॉजिटरी प्रतिस्थापन नहीं है, बल्कि डोमेन परत भी हो सकता है!)
यहाँ किसी भी मार्गदर्शन की सराहना की है।