2009-09-25 15 views
16

मान लें कि मुझे 2 इकाइयां मिली - फू और बार। फू एक समग्र जड़ है और इसमें बार शामिल है। जहां तक ​​मैं समझता हूँ, यह इस तरह दिखना चाहिए:डीडीडी: कुल रूट प्रश्न

public class Foo{ 
    private readonly Bar Bar; 
} 

मैं कार्यक्षमता प्रदान करने के उपयोगकर्ताओं को एक निर्धारित सूची से Foos के लिए बार्स का चयन करने के लिए (और इसे बदलने) चाहते हैं।

यदि भंडार कुल जड़ों के लिए माना जाता है तो इसका मतलब है कि बार इकाई के लिए कोई भंडार नहीं होगा।

इससे समस्या आती है - बार को फू के संदर्भ के बिना स्वतंत्र रूप से बनाया/अपडेट नहीं किया जा सकता है।

क्या इसका मतलब यह है कि बार को एक भंडार होना चाहिए, इसके बावजूद इसका कोई फू नहीं है?

+0

एक बेवकूफ सवाल है, सिर्फ बेवकूफ जवाब के रूप में ऐसी कोई बात नहीं के लिए आप औचित्य दे;) Btw इस सवाल का मुझे बहुत – Eldar

उत्तर

16

यदि आप बार्स की एक सूची से चयन करना चाहते हैं जहां वे Foo से जुड़े नहीं हैं, तो यह कुल रूट नहीं है। उदाहरण के लिए, आप ऑर्डरइटम की सूची के बिना ऑर्डरइटम की सूची नहीं प्राप्त कर सकते हैं, इसलिए यह एकल कुल रूट (ऑर्डर) है, लेकिन आप ऑर्डरइटम को असाइन करने के लिए उत्पादों की सूची प्राप्त कर सकते हैं, इसलिए उत्पाद ऑर्डर कुल रूट का हिस्सा नहीं है।

ध्यान दें कि ऑर्डरइटम ऑर्डर समग्र रूट का हिस्सा है, फिर भी आप इसे स्वतंत्र रूप से बना और अपडेट कर सकते हैं। लेकिन, आप आदेश के संदर्भ के बिना इसे प्राप्त नहीं कर सकते हैं। आपके बार के लिए, भले ही यह फू का हिस्सा था, आप प्रत्येक (Foo.Bars) प्राप्त कर सकते हैं और इसके साथ काम कर सकते हैं, या Foo.AddBar (नया बार()) कर सकते हैं। लेकिन अगर आपको फू के बिना सूची प्राप्त करने की आवश्यकता है, तो बार फू कुल का हिस्सा नहीं है। यह एक अलग इकाई है।

ठीक है, इस तरह मैं यहां डीडीडी देखता हूं, लेकिन मैं निश्चित रूप से एरिक इवांस नहीं हूं।

+0

यह समझ में आता है। अगर आपको कुछ और कहना है - आगे बढ़ो। :) –

+0

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

+1

मेरे दिमाग में आने वाला एक और सुझाव यह है कि यदि आपका बार एक स्टैंडअलोन है (एक अलग सूची के रूप में प्रस्तुत किया जा सकता है) और एक ही समय में (फू के अंदर काम करता है) - शायद आपके पास वास्तव में दो इकाइयां हैं। एक संक्षिप्त उदाहरण: समूह {नाम, मूल्य} - ऑर्डर/उत्पाद दोनों के अंदर होना चाहिए और अलग से प्रस्तुत किया जाना चाहिए, लेकिन यदि आप इसे समूह {नाम} और उत्पाद समूह {समूह, मूल्य} में विभाजित करते हैं, तो आप समूह समूह को भाग के रूप में रखते हुए समूह को अलग से प्रस्तुत करते हैं कुल मिलाकर – queen3

2

क्या आप वाकई बार को एक इकाई होने की आवश्यकता है? क्या आपको इसे ट्रैक करने और डोमेन में बदलने की आवश्यकता है? यदि आप इसे एक मूल्य वस्तु के रूप में देख सकते हैं, तो मैं सुझाव दूंगा कि आप इसे किसी सेवा से प्राप्त करें और फिर चयनित मान ऑब्जेक्ट को Foo इकाई से "कनेक्ट करें"। एक ड्रॉपडाउन सूची के माध्यम से instants के लिए।

+0

मदद की और क्यों इकाई नहीं किया जा सकता सेवा के माध्यम से लाया और फू से जुड़ा हुआ? –

+0

इकाई के संदर्भ के बिना मूल्य वस्तुएं कैसे बनाई/अपडेट की जानी चाहिए? क्या वह मास्किंग सेवा को भंडार के रूप में नहीं रखेगा जो मूल्य वस्तु के पास नहीं होनी चाहिए? –

+0

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

8

सकल जड़ें होने के लिए कारण हैं:

  1. वे नियंत्रित और समग्र संस्थाओं की पहुंच का निर्देश प्रदान
  2. वे नियमों को लागू सुनिश्चित करने के लिए है कि पूरे कुल मान्य है सकते हैं

मेरे ले लें: यदि आपको Bar ऑब्जेक्ट्स Foo के बिना चुनने की आवश्यकता है, तो BarRepository का उपयोग करें।

लेकिन ... क्या आप एक Bar अद्यतन करते हैं, और यह एक सत्यापन नियम के लिए उसे अपने जनक Foo है टूट जाता है तो क्या होगा? यदि ऐसा हो सकता है, तो आपको इसके माता-पिता Foo के माध्यम से Bar तक पहुंच प्राप्त करनी चाहिए।

अगर, हालांकि, आप (एक बैच कार्य या रिपोर्ट के लिए उदाहरण के) Bar वस्तुओं का एक समूह का उपयोग करने की जरूरत है, और आप जानते हैं कि Foos टूटा नहीं मिलेगा आगे जाना है और BarRepository के माध्यम से उन तक पहुंचें।

याद रखें कि कुल जड़ों को अन्य कुल जड़ों से बनाया जा सकता है।कि Bar एक समग्र जड़ ही है आपको पता चल सकता है, एक BarRepository :)

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