आपकी शब्दावली के आधार पर मुझे लगता है कि आप एरिक इवांस की पुस्तक के आधार पर डीडीडी कर रहे हैं। ऐसा लगता है कि आप मॉडलिंग पर अपने प्रारंभिक जाने के साथ पहले से ही एक समस्या की पहचान कर चुके हैं और आप सही हैं।
आपने उल्लेख किया है कि आप Value Object
के रूप में आपूर्तिकर्ता के बारे में सोचते हैं ... मेरा सुझाव है कि यह नहीं है। एक Value Object
मुख्य रूप से इसकी संपत्तियों द्वारा पहचाना जाता है। उदाहरण के लिए, "30 सितंबर, 200 9" तिथि एक मूल्य वस्तु है। क्यूं कर? क्योंकि एक अलग महीने/दिन/वर्ष कॉम्बो के साथ सभी दिनांक उदाहरण अलग-अलग तिथियां हैं। उसी महीने/दिन/वर्ष कॉम्बो के साथ सभी दिनांक उदाहरण समान मानते हैं। हम आपके लिए "30 सितंबर, 200 9" को स्वैप करने पर कभी बहस नहीं करेंगे क्योंकि वे समान हैं :-)
दूसरी ओर Entity
मुख्य रूप से इसकी "आईडी" द्वारा पहचाना जाता है। उदाहरण के लिए, बैंक खातों में आईडी हैं - उनके पास खाता संख्याएं हैं। यदि बैंक में दो खाते हैं, प्रत्येक $ 500 के साथ, यदि उनके खाते की संख्या अलग हैं, तो वे भी हैं। उनकी गुण (इस उदाहरण में, उनकी शेष राशि) उन्हें पहचान नहीं देती है या समानता का संकेत नहीं देती है।मैं शर्त लगाता हूं कि बैंक खातों को स्वैप करने पर भी बहस होगी, भले ही उनके बैलेंस समान हों :-)
तो, उदाहरण के लिए, मैं एक सप्लायर को Entity
पर विचार करता हूं, क्योंकि मुझे लगता है कि प्रत्येक सप्लायर मुख्य रूप से इसकी आईडी द्वारा पहचाना जाता है इसकी संपत्तियों की तुलना में। मेरी अपनी कंपनी दुनिया में दो अन्य लोगों के साथ अपना नाम साझा करती है - फिर भी हम सभी विनिमय नहीं कर सकते हैं।
मुझे लगता है कि अगर आपको किसी ऑब्जेक्ट को CRUD करने के लिए विचारों की आवश्यकता है तो यह आपके सुझाव को लगता है कि यह Entity
शायद अंगूठे के नियम के रूप में सच है, लेकिन आपको अन्य ऑब्जेक्ट्स को अलग-अलग चीज़ों से अलग करना चाहिए: गुण या आईडी।
अब जहाँ तक Aggregate Root
रों जाते हैं, आप वस्तुओं के जीवन चक्र और अभिगम नियंत्रण पर ध्यान केंद्रित करना चाहते हैं। इस बात पर विचार करें कि मेरे पास कई टिप्पणियों वाले ब्लॉग हैं जिनमें कई टिप्पणियां हैं - Aggregate Root
कहां हैं? आइए टिप्पणी के साथ शुरू करते हैं। क्या किसी पोस्ट के बिना टिप्पणी करना समझ में आता है? क्या आप एक टिप्पणी तैयार करेंगे, फिर एक पोस्ट ढूंढें और इसे संलग्न करें? यदि आप कोई पोस्ट हटाते हैं, तो क्या आप इसकी टिप्पणियां चारों ओर रखेंगे? मेरा सुझाव है कि एक पोस्ट एक "पत्ता" - टिप्पणियों के साथ Aggregate Root
है। अब ब्लॉग पर विचार करें - इसकी पोस्ट के साथ इसका संबंध पोस्ट और टिप्पणियों के बीच समान है। यह भी मेरी राय में एक Aggregate Root
एक "पत्ता" - पदों के साथ है।
अपने उदाहरण में
इसलिए, कंपनी और आपूर्तिकर्ता के बीच एक मजबूत संबंध जिससे यदि आप एक कंपनी को हटाना (मुझे पता है ... आप शायद ही कंपनी का एक उदाहरण है) आप भी अपने आपूर्तिकर्ताओं को हटाना चाहते हैं? यदि आप "स्टारबक्स" (यूएस में एक कॉफी कंपनी) को हटाते हैं तो क्या इसके सभी कॉफी बीन आपूर्तिकर्ताओं का अस्तित्व समाप्त हो जाता है? यह सब अपने डोमेन और एप्लिकेशन पर निर्भर करता है, लेकिन मैं होने की संभावना न के अपने Entities
Aggregate Roots
हैं, या शायद उनके बारे में सोचने के लिए एक बेहतर तरीका है कि वे सकल जड़ें नहीं "पत्ते" के साथ एक कर रहे हैं की तुलना में अधिक सुझाव है (एकत्र करने के लिए कुछ भी नहीं है)। दूसरे शब्दों में, कंपनी आपूर्तिकर्ताओं के जीवन चक्र तक पहुंच या नियंत्रण को नियंत्रित नहीं करती है। यह केवल आपूर्तिकर्ताओं (या शायद कई से कई) के साथ एक से अधिक संबंध है।
यह Repositories
करने के लिए हमें लाता है। Repository
Aggregate Roots
को संग्रहीत करने और पुनर्प्राप्त करने के लिए है। आपके पास दो (तकनीकी रूप से वे कुछ भी एकत्र नहीं कर रहे हैं, लेकिन यह कहने से आसान है कि "रिपोजिटरीज कुल जड़ें या संस्थाएं जो समग्र रूप से पत्तियां नहीं हैं"), इसलिए आपको दो Repositories
की आवश्यकता है। कंपनी के लिए एक और आपूर्तिकर्ताओं के लिए एक।
मुझे उम्मीद है कि इससे मदद मिलती है। शायद एरिक इवांस यहां घूमते हैं और मुझे बताएंगे कि मैं उनके प्रतिमान से विचलित हूं।
बहुत बढ़िया जवाब! आपने जो कुछ भी सोच रहा था उसे सत्यापित करने में मदद की और बहुत कुछ समझाया। आपको बहुत - बहुत धन्यवाद! मैं मानता हूँ, वहाँ आपूर्तिकर्ताओं के लिए संदर्भित करता है, तो वे मौजूद साझा किया जाना चाहिए, लेकिन इस समय यह उपयोगकर्ता हो जाएगा के लिए कोई रास्ता नहीं के साथ डेटा दर्ज मान्य करने के लिए है कि 2 आपूर्तिकर्ताओं ही हैं। भविष्य में यह बदल सकता है क्योंकि सिस्टम विकसित होता है, लेकिन अब यह कहानी है। एक बार फिर धन्यवाद! –
मैं मानता हूं कि यह एक महान स्पष्टीकरण है, जो मुझे आम तौर पर डीडीडी मेलिंग सूची में मिलता है उससे ज्यादा उपयोगी है! –
शानदार उत्तर। एक मुझसे मुझसे वोट। –