2011-02-15 13 views
6

इस पर कई प्रश्न हैं, और उन्हें पढ़ना मेरी मदद नहीं कर रहा है। एरिक इवांस डीडीडी में, वह कुछ स्थितियों में एक मूल्य प्रकार होने के पते का उदाहरण उपयोग करता है। मेल ऑर्डर कंपनी के लिए, पता एक मान प्रकार है क्योंकि यह वास्तव में कोई फर्क नहीं पड़ता कि पता साझा किया गया है, पते पर कौन रहता है, बस यह पता कि पैकेज पते पर आता है।डीडीडी: मुझे मूल्य वस्तुओं और संस्थाओं को और समझने में सहायता करें

यह तब तक मुझे समझ में आता है जब तक कि मैं इस बारे में सोचना शुरू नहीं करता कि यह कैसे डिज़ाइन किया जाएगा। पेज 99 पर चित्र को देखते हुए, वह इसे इस तरह है:

+------------+ 
|Customer | 
+------------+ 
|customerId | 
|name  | 
|street  | 
|city  | 
|state  | 
+------------+ 

यह करने के लिए परिवर्तन:

+------------+ 
|Customer | (entity) 
+------------+ 
|customerId | 
|name  | 
|address  | 
+------------+ 

+------------+ 
|Address  | (value object) 
+------------+ 
|street  | 
|city  | 
|state  | 
+------------+ 

तो इन तालिकाओं थे, पता क्रम में के साथ एक रिश्ता है करने के लिए अपने स्वयं के ईद के लिए होता है ग्राहक, इसे एक इकाई में बदल रहा है।

क्या यह विचार है कि एक संबंधपरक डेटाबेस में ये एक ही तालिका में रहेंगे, जैसे कि पहले उदाहरण में, और आप ओआरएम की विशेषताओं को एक अमूर्त पते के रूप में उपयोग करेंगे (जैसे nHibernate की घटक विशेषताओं)?

मुझे लगता है कि पृष्ठों के एक जोड़े के बाद वह असमान्यीकरण बारे में बात करती, मैं सिर्फ यकीन है कि मैं अवधारणा को सही ढंग से समझ रहा हूँ बनाने के लिए कोशिश कर रहा हूँ।

उत्तर

2

विचार यह है कि एक संबंधपरक डेटाबेस में इन तरह के पहला उदाहरण में के रूप में, एक ही तालिका में रहना होता है और आप एक मूल्य वस्तु के रूप में सार का पता करने के लिए ORM की सुविधाओं का उपयोग होता है कि (जैसे nHibernate का घटक विशेषताएं)?

हां, आम तौर पर, यह विचार है।

वैकल्पिक रूप से (यदि आपके ORM मूल्य का समर्थन नहीं करता सीधे ऑब्जेक्ट्स), तो आपको VO टेबल एक आईडी है, लेकिन अपने डोमेन मॉडल के भीतर है कि छिपाने के लिए दे सकते हैं।

1

मैं व्यक्तिगत रूप से जब तक वे समानता तुलना ठीक से ओवरराइड मूल्य की वस्तुओं पर आईडी होने के बारे में एक बहुत देना नहीं है (कारण मूल्य वस्तुओं उनकी नहीं मूल्य पहचान के आधार पर भिन्न)।

डाटाबेस के लिए मैपिंग वैल्यू ऑब्जेक्ट्स तकनीकी चिंता है, कभी-कभी (उदाहरण के लिए वर्चुअल प्रोप वर्चुअल तो ओआरएम नीचे क्रॉल कर सकता है) आपको बस डोमेन मॉडल की शुद्धता बलिदान करने की आवश्यकता है। या अपने बुनियादी ढांचे को स्मार्ट बनाएं - निब घटक या कुछ का उपयोग करें।

7

एरिक इवांस बारे में बात करती जब "संस्थाओं पहचान है, मूल्य वस्तुओं नहीं है", उन्होंने डेटाबेस में एक आईडी स्तंभ के बारे में बात नहीं कर रहा है - वह एक अवधारणा के रूप पहचान के बारे में बात कर रहा है।

वीओ की कोई वैचारिक पहचान नहीं है। इसका मतलब यह नहीं है कि उन्हें दृढ़ता की पहचान नहीं होनी चाहिए। मत हठ कार्यान्वयन संस्थाओं बनाम वीओ की अपनी समझ को बादल।

आप ग्राहक

+0

इस स्पष्टीकरण के लिए धन्यवाद यह मुझे इस तरह के परिदृश्यों में डीडीडी के उपयोग के बारे में अधिक आत्मविश्वास महसूस करने में मदद करता है। – jpierson

1

हाँ, आम तौर पर एक ही तालिका में रहना होता था पता में पते के लिए या एक ही तालिका में अलग तालिका बना सकते हैं। पता कुछ इस तरह मैप किया जाएगा:

+-----------------+ 
|Customer   | 
+-----------------+ 
|customerId  | 
|name    | 
|address_street | 
|address_city  | 
|address_state | 
+-----------------+ 

तो पता एक इकाई था, तो यह, एक अलग तालिका में होगा के रूप में आप ने कहा।यदि एक ही ग्राहक एक ही पता इकाई से जुड़ा हुआ है, तो उस पते की एक विशेषता बदलना दोनों ग्राहकों को प्रभावित करेगा। हालांकि, एक वीओ कार्यान्वयन केवल एक या दूसरे को प्रभावित करेगा।

संबंधित मुद्दे