तो मुझे रिपोजिटरी विधियों पर अपडेट कहां से कॉल करना चाहिए?
एक टकसाली DDD वास्तुकला में भंडार आम तौर पर एक आवेदन सेवा द्वारा कहा जाता है। एक आवेदन सेवा एक कक्षा है जो आपके डोमेन को encapsulating facade के रूप में कार्य करती है और डोमेन ऑब्जेक्ट्स, रिपॉजिटरीज और अन्य सेवाओं को ऑर्केस्ट्रेट करके डोमेन का उपयोग करता है।
मैं आपके डोमेन से परिचित नहीं हूं, लेकिन मान लीजिए कि एक उपयोग केस है जो एक Quadrant
से Field
में State
को दूसरे स्थान पर ले जाता है। जैसा कि आपने कहा है, Field
एआर है। तो अगर आप चाहते हैं एक FieldApplicationService
एक संदर्भित FieldRepository
:
public class FieldApplicationService
{
readonly FieldRepository fieldRepository;
public void ShiftFieldState(int fieldId, string quadrant, string state)
{
// retrieve the Field AR
var field = this.fieldRepository.Get(fieldId);
if (field == null)
throw new Exception();
// invoke behavior on the Field AR.
field.ShiftState(quadrant, state);
// commit changes.
this.fieldRepository.Update(field);
}
}
आवेदन सेवा ही बहुत पतली है। यह किसी भी डोमेन तर्क को लागू नहीं करता है; यह केवल डोमेन तर्क के निष्पादन के लिए मंच को व्यवस्थित करता है और सेट करता है जिसमें भंडार तक पहुंच शामिल है। आपके डोमेन के आश्रित सभी कोड, जैसे प्रस्तुति परत या सेवा इस एप्लिकेशन सेवा के माध्यम से डोमेन कार्यक्षमता का आह्वान करेगी।
भंडार विभिन्न तरीकों से लागू किया जा सकता है। यह एक ओआरएम जैसे एनएचबीर्नेट के साथ हो सकता है, जिसमें मामले में परिवर्तन ट्रैकिंग का निर्माण किया गया है और सामान्य दृष्टिकोण एक स्पष्ट अद्यतन को कॉल करने के बजाय सभी परिवर्तनों को करना है। NHibernate Unit of Work प्रदान करता है साथ ही कई इकाइयों में परिवर्तनों को एक के रूप में भी किया जा सकता है।
आपके मामले में, जैसा कि आपने कहा है, कोई परिवर्तन ट्रैकिंग नहीं है, इसलिए अपडेट करने के लिए एक स्पष्ट कॉल की आवश्यकता है और यह इसे संभालने के लिए रिपोजिटरी कार्यान्वयन पर निर्भर है। यदि डेटाबेस के रूप में SQL सर्वर का उपयोग करते हैं, तो Update
रिपोजिटरी पर विधि Field
के सभी गुणों को संग्रहीत प्रक्रिया में भेज सकती है जो आवश्यकतानुसार तालिकाओं को अपडेट करेगी।
प्रश्न: क्या होगा यदि यह स्पष्ट नहीं है कि कौन से योग संशोधित किए गए थे *? जैसेएप्लिकेशन सेवा 'bookLendingService.LendBookToClient (पुस्तक, क्लाइंट)' कॉल करती है। पुस्तक बचाओ? ग्राहक बचाओ? हम कैसे सुनिश्चित कर सकते हैं कि एप्लिकेशन सेवा * जानता है * और यह कभी नहीं बदलेगा? – Timo
मैंने प्रति लेनदेन केवल एक समग्र उत्परिवर्तन के नियम के बारे में सुना है, जो ऊपर दिए गए मेरे प्रश्न का उत्तर हो सकता है। यदि हां, तो इस नियम का कारण क्या है? और एक परिदृश्य से कैसे निपटता है जिसके लिए कई योगों में परिवर्तन की आवश्यकता होती है? – Timo