के अंदर एक इकाई को अपडेट करें मैं SO: How update an entity inside Aggregate पर एक समान प्रश्न पढ़ रहा था, लेकिन मुझे अभी भी यह सुनिश्चित नहीं है कि उपयोगकर्ता इंटरफ़ेस को कुल मिलाकर इकाइयों के साथ कैसे इंटरैक्ट करना चाहिए।कुल
मान लें कि मेरे पास User
है, Address
es के समूह के साथ। उपयोगकर्ता कुल रूट है, जबकि पता केवल कुल के भीतर मौजूद है।
वेब इंटीफेस पर, कोई उपयोगकर्ता अपने पते को संपादित कर सकता है। असल में, क्या होता है:
- उपयोगकर्ता अपने वेब इंटरफेस
- वह एक पते पर क्लिक करता है, और इस पृष्ठ पर रीडायरेक्ट हो जाता है पर पतों की सूची देखता है:
edit-address?user=1&address=2
- इस पृष्ठ पर, वह हो जाता है एक वह फॉर्म जहां वह इस पते को संशोधित कर सकता है।
मैं हम इस सरल होगा कुल जड़ बायपास करने के लिए फैसला किया:
- हम सीधे के साथ
Address
लोड होगा अपनेId
- हम इसे अद्यतन होगा, तो बचाने के यह
क्योंकि हम इसे डीडीडी तरीके से करना चाहते हैं, हमारे पास अलग-अलग समाधान हैं:
या तो हम उपयोगकर्ता पूछना आईडी द्वारा इस पता पाने के लिए :
address = user.getAddress(id);
address.setPostCode("12345");
address.setCity("New York");
em.persist(user);
इस दृष्टिकोण के साथ समस्या यह है, IMO, कि कुल जड़ अभी भी पते के साथ क्या किया गया है पर अधिक नियंत्रण नहीं है। यह सिर्फ इसका संदर्भ देता है, इसलिए यह कुल को छोड़कर बहुत अलग नहीं है।
या हम किसी मौजूदा पते अद्यतन करने के लिए कुल बता :
user.updateAddress(id, "12345", "New York");
em.persist(user);
अब कुल है क्या इस पते के साथ किया है, और है कि चला जाता है कोई भी आवश्यक कार्रवाई कर सकते हैं पर नियंत्रण एक पता अद्यतन करने के साथ।
या हम एक मूल्य वस्तु के रूप में पता का इलाज, और हम अपने
Address
अपडेट करते हैं, बल्कि इसे हटा और यह पुन:user.removeAddress(id);
address = new Address();
address.setPostCode("12345");
address.setCity("New York");
user.addAddress(address);
em.persist(user);
यह अंतिम समाधान सुरुचिपूर्ण लग रहा है, लेकिन इसका मतलब है कि एक पता एक संस्था नहीं हो सकता है। फिर, अगर को इकाई के रूप में माना जाता है, तो उदाहरण के लिए, क्योंकि कुल मिलाकर किसी अन्य व्यावसायिक वस्तु का संदर्भ है?
मैं बहुत यकीन है कि मैं यहाँ कुछ याद कर रहा हूँ सही ढंग से कुल अवधारणा को समझने की और कैसे यह वास्तविक जीवन उदाहरण में प्रयोग किया जाता है, ताकि अपनी टिप्पणी देने के लिए संकोच नहीं करते कृपया रहा हूँ!
धन्यवाद। यह वास्तव में समझ में आता है, हालांकि मुझे यकीन नहीं है कि 'changeAddress()' विधि को कैसे कार्यान्वित किया जाए। उपर्युक्त उदाहरण एक oversimplification है, और एक पता सड़क के नाम, इमारत संख्या, मानचित्र पर सही स्थान के लिए 'LatLng' बिंदु सहित एक दर्जन क्षेत्रों से बना हो सकता है।फिर आप क्या सुझाव देते हैं, इन सभी मानकों को विधि तर्कों में रखें, या फ़ॉर्म से किसी प्रकार की क्षणिक वस्तु बनाएं (क्या यह 'पता' ऑब्जेक्ट भी होगा?), और इसे इस विधि के लिए तर्क के रूप में पास करें? – Benjamin
मैंने सबसे आम परिदृश्य के लिए नमूना कोड जोड़ा है। मैं खेतों की संख्या के बारे में चिंता नहीं करता - डीडीडी वास्तव में डेटा के बारे में नहीं है, यह संबंधों और जटिलता के प्रबंधन के बारे में है। – kstaruch