2012-11-30 13 views
6

मेरे पास एक ऐसा सिस्टम है जहां उपयोगकर्ता किसी फ़ॉर्म में प्रश्न का उत्तर देता है। मेरे पास इस मॉडल का प्रतिनिधित्व करने वाली वस्तुएं हैं लेकिन मुझे पूरा यकीन नहीं है कि इन वस्तुओं को डीडीडी के संदर्भ में कैसे व्यवस्थित किया जाए।डीडीडी में उपयुक्त दीप पदानुक्रम के साथ कुल रूट है?

  1. फॉर्म (इसकी अपनी सूची है) अनुभाग;
  2. अनुभाग -> (इसकी अपनी सूची है) समूह;
  3. समूह -> (इसकी अपनी सूची है) प्रश्न;
  4. प्रश्न -> (उप-प्रश्नों की अपनी सूची हो सकती है) प्रश्न;
  5. प्रश्न -> (इसकी अपनी सूची है) उत्तर;
  6. उत्तर -> (इसकी अपनी सूची है) answer_Details;
  7. उत्तर_Detail -> (संभावित रूप से उप विवरणों की अपनी सूची है) Sub_Answer_Details।

प्रत्येक ऑब्जेक्ट में 15 से अधिक गुण होते हैं और प्रत्येक अपने माता-पिता के बिना समझ में नहीं आता है। डीडीडी के मुताबिक, मेरा मानना ​​है कि फॉर्म इकाई एक समग्र रूट होना चाहिए और अन्य सभी वस्तुओं को मूल्य वस्तुएं होनी चाहिए। इसका मतलब है कि मुझे केवल फॉर्म इकाई के लिए एक रिपोजिटरी चाहिए। इस मामले में फॉर्म रिपोजिटरी को बाल वस्तुओं के लिए सभी प्रकार के सीआरयूडी तरीकों से अव्यवस्थित किया जाएगा। डीडीडी के मामले में मेरा तर्क सही है? क्या यह ठीक है कि मैं एक बहुत व्यापक कुल के साथ खत्म होता है? मेरा मानना ​​है कि इस तरह के प्रतिनिधित्व आसानी से प्रदर्शन मुद्दों के लिए नेतृत्व कर सकते हैं।

उत्तर

3

हां, डीडीडी में गहरा पदानुक्रम ठीक है।

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

हाँ, Form कुल रूट होना चाहिए।

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

इस मामले FormRepository CRUD तरीकों के सभी प्रकार बच्चे वस्तुओं के लिए से भरा हुआ हो जाएगा में - नहीं, भंडार कुल जड़ के बारे में केवल तरीकों, अर्थात् Get<T> , Save<T> where T : IAggregateRoot, एक बार आप एक समग्र जड़ का एक उदाहरण मिलता है, आप कर सकते हैं शामिल करना चाहिए आपको जो चाहिए उसे प्राप्त करने के लिए विशेषताओं और विधियों के माध्यम से ट्रैवर्स।उदाहरण:

var formId = 23; 
var form = _formRepository.Get(formId); 
var firstGroup = form.Sections.First().Group().First(); 

या बेहतर

var groupIndex = 1; 
var firstGroup = form.GetGroupAt(groupIndex); 

जहां

public Group GetGroupAt(int groupIndex) 
{ 
    Sections.First().Group().ElementAt(groupIndex); 
} 

मेरा मानना ​​है कि इस तरह के प्रतिनिधित्व आसानी से प्रदर्शन प्राप्त हो सकता मुद्दों - अगर आप CQRS उपयोग करते हैं, तुम कुछ Form कॉल कर रहे कमांड हैंडलर से डोमेन विधि, और यदि आप इकाई दृढ़ता के लिए NHibernate का उपयोग करते हैं, तो यह defaul द्वारा होगा आलसी लोडिंग का उपयोग नहीं करते हैं, और डीबी से केवल Form लोड करेंगे, और फिर यह केवल उन्हीं इकाइयों को लोड करेगा जो आप वास्तव में स्पर्श करते हैं, इसलिए उदाहरण के लिए Sections.First() डीबी से सभी अनुभाग लोड करेगा, लेकिन समूह और बाकी नहीं। पूछताछ के लिए, आप FormDto (डेटा ट्रांसफर ऑब्जेक्ट) और अन्य संभावित रूप से फ़्लैट किए गए डीटीओ को आपके इच्छित फॉर्म में डेटा प्राप्त करने के लिए बनाएंगे (जो आपकी संस्था संरचना से भिन्न हो सकता है और यूआई डीटीओ संरचना को चला सकता है)। DDD/CQRS/NHibernate/भंडार के बारे में जानकारी के लिए मेरी blog पर एक नज़र डालें

+0

हाल ही में हाल ही में [प्रभावी समग्र डिजाइन] (https://vaughnvernon.co/?p=139) पढ़ें जहां छोटे योग की सिफारिश की जाती है। एक विशाल कुल के साथ प्रदर्शन समस्याएं हो सकती हैं जिनमें हजारों वस्तुओं के साथ बाल संस्थाओं का संग्रह शामिल है, क्योंकि संग्रह में कोई आइटम जोड़ना पूरे संग्रह को ला रहा है (उदाहरण के लिए इस तरह के निबर्ननेट काम करता है) – xhafan

+0

[प्रभावी समग्र डिजाइन] के लिंक को फिक्स्ड किया गया है। (http://dddcommunity.org/library/vernon_2011) – xhafan

+0

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

4

हालांकि एक जवाब स्वीकार किया गया है मैंने सोचा कि मैं के रूप में अच्छी तरह से जोड़ सकते हैं मेरी 2 सेंट:

दीप पदानुक्रम हैं (शायद) ठीक लेकिन याद रखें कि कुल मिलाकर विचार वास्तव में इसे रोकने के लिए है। मैं की तर्ज पर एक समग्र में संस्थाओं के बारे में सोच के लिए करते हैं:

"क्या यह इकाई एआर बिना कोई अर्थ है?"

चूंकि मेरे पास कोई संदर्भ नहीं है w.r.t. आपका मॉडल मैं Order/OrderLine का उपयोग करूंगा। क्या OrderLineOrder के बिना कोई अर्थ है? क्या मैं ऑर्डर लाइन के साथ कुछ भी कर सकता हूं (व्यवहार)? यहां स्पष्ट उत्तर "नहीं" है।

प्रत्येक मॉडल को संदर्भ के आधार पर इलाज करने की आवश्यकता होगी। लेकिन स्वामित्व का मतलब रोकथाम नहीं है।

ये देखने के लिए जब आप अलग घिरे संदर्भों प्रदान की एक बीसी को सही :)

आपके मामले में एक Answer अपने Question बिना कोई अर्थ नहीं हो सकता है हो जाता है के साथ काम आसान हो सकता है। लेकिन शायद QuestionQuestionBank ईसा पूर्व में रह सकता है और आपके Examination ईसा पूर्व और आपके Enrollment ईसा पूर्व में एक विशेष प्रश्न का उपयोग किया जा सकता है। ये सभी पूरी तरह से तैयार हैं ताकि यह आपके संदर्भ पर निर्भर करेगा।

तो यदि यह एक मामला है कि Question एक एआर हो सकता है तो आपके Form एआर के स्वामित्व वाले प्रश्न केवल एक मूल्य वस्तु या यहां तक ​​कि एक साधारण प्रश्न आईडी हो सकते हैं।

+0

आपके 2 सेंट के लिए धन्यवाद। मुझे समझ में नहीं आता कि आपका क्या मतलब है: _So यदि यह एक मामला है कि प्रश्न एक एआर हो सकता है तो आपके फॉर्म एआर के स्वामित्व वाले प्रश्न केवल एक मूल्य ऑब्जेक्ट_ हो सकते हैं। – ddv

+0

कैसे एक प्रश्न एआर एक वैल्यू ऑब्जेक्ट हो सकता है। सभी एआर संस्थाएं होनी चाहिए। असल में मेरे मामले में सभी वस्तुओं को मालिक के बिना समझ में नहीं आता है। उन्हें फॉर्म संदर्भ के बिना एक्सेस नहीं किया जाता है। मेरे मामले में अनुभागों और समूहों के पास समूहबद्ध प्रश्नों की तुलना में अन्य अर्थ नहीं है। कृपया, अगर आप दृष्टिकोण करते हैं तो मुझे बताएं @ xhafan के एक से अलग होगा। आपको क्या लगता है कि वीओएस – ddv

+0

आह हो सकता है, मैं देखता हूं कि उत्तर क्यों समझ में नहीं आ सकता है :) --- इसके बारे में खेद है। मेरा मतलब यह है कि यदि बीसी-बी में बीसी-ए में एक एआर का उपयोग बीसी-बी में किया जाता है तो आप या तो केवल प्रासंगिक एआर आईडी * या * मॉडल को वैल्यू ऑब्जेक्ट के रूप में उपयोग कर सकते हैं। मॉडल मॉडल के आपके संदर्भ/समझ पर 100% निर्भर करेगा। इसलिए मैं यह नहीं कह सकता, निश्चित रूप से, जो आपके पास है वह सही नहीं है। हालांकि, मैंने अतीत में इसी तरह के एआरएस को मॉडल किया है और, अंत में, मुझे पता है कि यह 100% सही नहीं था। अगर यह काम करता है तो यह ठीक है; यदि आप मुद्दों/डुप्लिकेशन में भाग लेते हैं तो आप मॉडल को फिर से देखना चाहेंगे। –