मैं रिपॉजिटरीज़ के साथ थोड़ा सा संघर्ष कर रहा हूं। मैं सी # और एनएचबेर्नेट का उपयोग कर रहा हूं। मेरे पास सवाल यह है कि: मेरे भंडार को सहेजने या प्राप्त करने से पहले कितना करना चाहिए?रिपोजिटरी पैटर्न का उपयोग करते समय मुझे अपने भंडार विधियों को कितना तर्क देना चाहिए?
उदाहरण के लिए मेरे पास एक उपयोगकर्ता वर्ग है जो एक समग्र रूट है। मैं "रजिस्टर" नामक एक विधि को कॉल करना चाहता हूं जो उपयोगकर्ता को जोड़ देगा और व्यवसाय नियमों के आधार पर कुछ डिफ़ॉल्ट मान सेट करेगा और कुछ अन्य संस्थाएं बनाएगा जो "उपयोगकर्ता" रूट (यानी पता, समूह, आदि) के उप-भाग भी हैं। मैं बुलाना चाहिए
userRepo.Register(newUser);
जो (स्पष्ट मुद्दों की अनदेखी कर) होगा:
Regsiter(User newUser){
newUser.SomeProp = "Default Data";
Group g= new Group;
g.SomeProp2 = "Default Data";
newUser.Groups.Add(g);
Session.Save(g);
Session.Save(newUser);
}
या मैं एक व्यापार परत में रजिस्टर करने चाहिए थे और यह कार्य करें:
Regsiter(User newUser){
newUser.SomeProp = "Default Data";
Group g= new Group;
g.SomeProp2 = "Default Data";
newUser.Groups.Add(g);
userRepo.Register(newUser, g);// this does session.save on both objects.
}
दोनों थोड़ा गलत लगता है।
सही दृष्टिकोण क्या है?
संपादित ------------------------------- सभी प्रतिक्रियाओं के लिए
धन्यवाद। मैं यह तय नहीं कर सकता कि कौन सबसे सही है और इसलिए स्वीकार करने का उत्तर कौन सा है।
आम तौर पर हर कोई कह रहा है कि व्यवसाय नियम किसी अन्य परत में डाल दें। यह समझ में आता है लेकिन मैं समूहों के लिए डेटा कॉल के बारे में अनिश्चित हूं - चूंकि समूह एक समग्र रूट नहीं हैं, उनके पास अपनी खुद की भंडार नहीं होनी चाहिए, इसलिए मैं उन्हें जोड़ने और सहेजने के बारे में कैसे जा सकता हूं? मेरे प्रोजेक्ट में उपयोगकर्ता के समूह संग्रह में एक समूह जोड़ना स्वचालित रूप से डीबी में समूह नहीं बनाता है; मुझे ऑब्जेक्ट पर session.save को कॉल करने की भी आवश्यकता है। तो क्या मैं इसे उपयोगकर्ता रेपो में userRepo.SaveGroup (g) के रूप में डालूं?
यदि मेरे पास अन्य परत में createGroup() है तो इसे या तो अपने स्वयं के रेपो या उपयोगकर्ताओं का उपयोग करने की आवश्यकता होगी। या मैं मोटी हो रहा हूँ?
समूह निर्माण उपयोगकर्ता सामग्री में है। समूह निर्माण डीबी बातचीत कहाँ होती है? एक समूह रेपो या उपयोगकर्ता repo में? –
यह निर्भर करता है। समूह रिपोजिटरी के लिए एक मामला हो सकता है। अभ्यास में, प्रति योग एक प्रति को रिपॉजिटरीज़ को सीमित करने का प्रयास करें। ऐसे मामले में, मौजूदा समूह को खोजने के लिए समूह रिपॉजिटरी का उपयोग करें और समूह को अपने UserFactory.CreateNewUser विधि में पैरामीटर के रूप में पास करें। जब UserRepository उपयोगकर्ता को सहेजता है, तो यह सुनिश्चित करने के लिए कि आप समूह एसोसिएशन को भी सहेज रहे हैं, अपनी कॉन्फ़िगरेशन जांचें। –
वैकल्पिक रूप से, यह एक नई उपयोगकर्ता ऑब्जेक्ट को तुरंत चालू करने के लिए और अधिक समझ सकता है और निम्न कार्यान्वयन के साथ UserServices.RegisterWithDefaultGroup (उपयोगकर्ता उपयोगकर्ता) विधि है: समूह डिफ़ॉल्ट समूह = _groupRepository.FindByName ("डिफ़ॉल्ट"); user.AddGroup (defaultGroup); रजिस्टर (उपयोगकर्ता); यह वास्तव में आपके आवेदन, सॉफ़्टवेयर आर्किटेक्चर पर निर्भर करता है, और आप कितने सख्त कुछ सिद्धांतों का पालन करना चाहते हैं। सौभाग्य! –