वर्तमान में मेरे पास डेटाबेस की प्रत्येक तालिका के लिए एक भंडार है और केवल आगे की जड़ों तक कम करके खुद को DDD के साथ संरेखित करना चाहते हैं।
चलो मान लेते हैं कि मेरे पास निम्नलिखित तालिकाओं हैं, User
और Phone
। प्रत्येक उपयोगकर्ता के पास एक या अधिक फ़ोन हो सकते हैं। सकल जड़ की धारणा के बिना मैं ऐसा कुछ कर सकता हूं:
//assuming I have the userId in session for example and I want to update a phone number
List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId);
phones[0].Number = “911”;
PhoneRepository.Update(phones[0]);
अभ्यास की तुलना में समग्र जड़ों की अवधारणा कागज पर समझना आसान है। मेरे पास कभी भी फ़ोन नंबर नहीं होंगे जो किसी उपयोगकर्ता से संबंधित नहीं हैं, इसलिए क्या यह PhoneRepository के साथ दूर करना और फ़ोन से संबंधित विधियों को UserRepository में शामिल करना होगा? उत्तर को हां मानते हुए, मैं पूर्व कोड नमूने को फिर से लिखने जा रहा हूं।
क्या मुझे UserRepository पर एक विधि की अनुमति है जो फ़ोन नंबर लौटाती है? या इसे हमेशा किसी उपयोगकर्ता के संदर्भ में लौटा देना चाहिए, और फिर फ़ोन नंबर प्राप्त करने के लिए उपयोगकर्ता के माध्यम से संबंध को पीछे छोड़ना चाहिए:
List<Phone> phones = UserRepository.GetPhoneNumbers(userId);
// Or
User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone
इसके बावजूद कि मैं किस तरह से फोन हासिल करता हूं, मुझे लगता है कि मैंने उनमें से एक को संशोधित किया है, मैं उन्हें कैसे अपडेट करूं? मेरी सीमित समझ यह है कि रूट के तहत वस्तुओं को रूट के माध्यम से अपडेट किया जाना चाहिए, जो मुझे नीचे # 1 विकल्प की ओर ले जाएगा। हालाँकि यह पूरी तरह से Entity फ्रेमवर्क के साथ अच्छी तरह से काम करेगा, यह बेहद अन-डिस्क्रिप्टिव लगता है, क्योंकि कोड को पढ़ने से मुझे कोई अंदाजा नहीं है कि मैं वास्तव में क्या अपडेट कर रहा हूं, भले ही Entity फ्रेमवर्क ग्राफ के भीतर बदली हुई वस्तुओं पर नजर रख रहा हो।
UserRepository.Update(user);
// Or
UserRepository.UpdatePhone(phone);
अन्त में, मैं इस तरह के रूप में कई देखने टेबल वास्तव में कुछ से जुड़ा नहीं है कि, है यह सोचते हैं CountryCodes
, ColorsCodes
, SomethingElseCodes
। मैं उन्हें ड्रॉप डाउन या अन्य किसी भी कारण से आबाद करने के लिए उपयोग कर सकता हूं। क्या ये स्टैंडअलोन रिपॉजिटरी हैं? क्या उन्हें किसी प्रकार के तार्किक समूह / भंडार में जोड़ा जा सकता है CodesRepository
? या यह कि सर्वोत्तम प्रथाओं के खिलाफ है।