2009-10-28 8 views
6

मुझे कुल रूट को डिजाइन करने में कुछ समस्याएं हैं। यहां बताया गया है कि मैं इसे अपने दिमाग में कैसे देखता हूं :)डिजाइन कुल रूट उचित

Store (the aggregate root) 
-> Sales - A store create a sale every day 
-> Zones - A store is divided into zones 
    -> Styles - A zone has x number of styles 
     --> Colors - A style has x number of colors 
    etc.. 

अब इस पर आधारित मेरी कुल रूट स्टोर होगी। हालांकि अगर मैं अब इसके आसपास एक रिपोजिटरी बनाने के लिए था, तो क्या ऐसा कुछ दिखता है?

public class StoreRepository() 
{ 
    Store GetById() {...} 
    StoreZone GetZone() {...} 
    List<StoreZoneStyle> GetStylesByZone() {...} 
    List<Color> GetColorsByStyle() {...} 
} 

क्या यह जारी रखने का एक अच्छा तरीका है? कहने की जरूरत नहीं है कि मैं डीडीडी में नया हूं।

उत्तर

6

मुझे लगता है कि आपको कुल सीमाओं और संस्थाओं को केवल पदानुक्रम से कुछ और देखने की आवश्यकता है। संभावना है, आप इसके मुकाबले एक अमीर मॉडल होगा।

यह बताने का पहला तरीका है कि आपका कुल सही है या नहीं, यह है कि आप इसके भीतर की प्रत्येक इकाई को देख सकते हैं और पूछ सकते हैं "क्या इसे सीधे एक्सेस किया जाना चाहिए?" यदि आप हाँ का उत्तर देते हैं, तो वह इकाई कुल योग का हिस्सा नहीं है।

अपने डोमेन के बारे में और जानने के बिना, मुझे लगता है कि स्टोर वास्तव में एक कुल है। दूसरी ओर, बिक्री अधिक जटिल हैं। हां, बिक्री एक दुकान में होती है, लेकिन क्या आपको स्वतंत्र रूप से बिक्री का उपयोग करने की आवश्यकता है? यदि आपको स्टोर के साथ काम करने के दायरे से बाहर की जरूरत है, तो बिक्री शायद उस कुल के बाहर है।

मैं कल्पना कर रहा हूं कि शैलियाँ और रंग दोनों अपरिवर्तनीय और दोहराने योग्य हैं, इसलिए वे इस मामले में मूल्य वस्तुएं होने की संभावना है। क्या ज़ोन एक स्टोर के लिए अद्वितीय हैं, या वे अलग-अलग हैं?

व्यक्तिगत रूप से, मुझे पेपर (या व्हाइटबोर्ड) पर डोमेन में सभी आइटमों की पहचान करने में मूल्य मिलता है। मैं हितधारक के साथ एक खोज चरण के माध्यम से जाऊंगा और बस उन्हें वहां बाहर ले जाऊंगा। फिर, वार्तालाप में नेताओं के रूप में इन शब्दों का उपयोग करें, यह समझने की कोशिश कर रहे हैं कि वे कैसे संबंधित हैं। यदि आप हितधारक को पर्याप्त साक्षात्कार देते हैं, तो वह विवरण जो वास्तव में देता है वह वास्तव में आपके द्वारा खोजे जा रहे अधिकांश कार्यों को परिभाषित करेगा।

मृत घोड़े को मारने के लिए नहीं, लेकिन इवांस पुस्तक निश्चित रूप से पढ़ने/पढ़ने के लायक है। यह थोड़ा सूखा है, लेकिन बहुत अंतर्दृष्टि है। त्वरित जंपस्टार्ट के लिए, आप free book को InfoQ पर पढ़ सकते हैं जो मूल रूप से इवांस पुस्तक का सारांश है।

+0

हां, मैं केवल स्टोर आईडी को पास करके बिक्री को सीधे एक्सेस करना चाहता हूं। मुझे लगता है कि मैं उस मामले में एक बिक्री रिपोजिटरी बनाउंगा? जोन स्टोर द्वारा भिन्न होते हैं।प्रत्येक स्टोर में अलग-अलग एक्स मात्रा क्षेत्र हो सकते हैं। क्या मैं यहां एक ज़ोन रिपोजिटरी भी बनाउंगा? मैंने इवांस बुक का आदेश दिया, हालांकि पहले से ही मेरे डोमेन पर शोध करना शुरू कर देगा। अगर आपको किसी अन्य जानकारी की ज़रूरत है तो कृपया मुझे बताएं। जितना अधिक ज्ञान मैं बेहतर प्राप्त कर सकता हूं मैं डीडीडी को समझूंगा। एक बार फिर धन्यवाद। – vikasde

+0

मेरी राय में डीडीडी में कुल सीमाएं शायद सबसे कठिन चीज हैं। यदि आप एक प्रस्तावित बिक्री भंडार में स्टोर पहचानकर्ता को पास करना चाहते हैं, तो तत्काल दो संभावनाएं हैं। सबसे पहले यह होगा कि बिक्री आपके द्वारा वर्णित स्टोर कुल का हिस्सा हो सकती है। दूसरा यह हो सकता है कि एक स्टोर बिक्री कुल का हिस्सा हो सकता है। एकमात्र तरीका वे वास्तव में समेकित होंगे यदि आपको स्वतंत्र रूप से दोनों तक पहुंचने की आवश्यकता होगी और उनके बिना एक दूसरे के प्रत्यक्ष ज्ञान की आवश्यकता होगी। ध्यान दें कि आपको ... –

+0

... से किसी अन्य समग्र रूट का संदर्भ नहीं देता है। उदाहरण के लिए, यदि आपने यह निर्धारित किया है कि स्टोर और सेल्स दोनों की कुल जड़ें थीं, तो कुछ भी एक स्टोर पहचानकर्ता के संदर्भ में बिक्री को रोकता है, जिसे आप स्टोर की आवश्यकता के लिए स्टोर स्टोर करने के लिए स्टोर रिपोजिटरी को कॉल करने के लिए उपयोग कर सकते हैं। जोन्स के लिए, स्टोर के लिए एक निश्चित संबंध है। यह इस मामले को मजबूत करता है कि स्टोर * एक समग्र रूट है और जोन एक इकाई है (क्योंकि वे आपके द्वारा वर्णित संदर्भ में आवश्यक रूप से अपरिवर्तनीय नहीं हैं)। तो, अभी, हमें यकीन है कि स्टोर एक समग्र है, जिसमें ज़ोन ... –

2

ऐसा लगता है कि "स्टोर" कुल रूट नहीं है क्योंकि आप "स्टोर" ऑब्जेक्ट के पीछे "ज़ोन", "बिक्री" आदि के लिए सभी कार्यक्षमताओं को छिपाना नहीं चाहते हैं। इस तरह "स्टोर" ऑब्जेक्ट बहुत फूला हुआ हो सकता है।

"स्टोर", "जोन" और "बिक्री" में इसका स्वयं का भंडार हो सकता है।

+0

क्या यह प्रत्येक ऑब्जेक्ट के लिए रिपोजिटरी रखने के लिए फुलाया नहीं जाएगा? आखिरकार वे सभी दुकान से संबंधित हैं, सही? – vikasde

+0

यदि प्रत्येक ऑब्जेक्ट के लिए रिपोजिटरी है तो यह फुलाया नहीं जाता है। वे छोटी और अधिक समझने योग्य वस्तुएं हैं (एकल जिम्मेदार सिद्धांत)। यदि आपके पास भंडार के लिए बेस क्लास है (रिपोजिटरी ), तो इसके कम कोड लेखन भी। इस तरह आपको शायद उन संस्थाओं के लिए केवल विशेष प्रश्न लिखना होगा। –

5

लेनदेन, वितरण और समरूपता (Eric Evans via Gojko Adzic) के लिए कुल रूट स्थिरता सीमाएं हैं।

जब दो लोग एक ही स्टोर में अलग-अलग जोनों को संशोधित करते हैं, तो क्या यह एक समवर्ती संघर्ष का कारण बनना चाहिए? यदि नहीं, तो शायद ज़ोन को स्टोर से अलग अपना कुल रूट होना चाहिए।