2010-11-10 6 views
5

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

Product को Order ऑब्जेक्ट में जोड़ने का सरल उदाहरण लें। हमारे नियंत्रक से, हमारे पास int UI के माध्यम से पारित होगा जो डेटाबेस में Product का प्रतिनिधित्व करता है। निम्नलिखित में से कौन सा उदाहरण सही है (मुझे बताएं कि क्या वे दोनों गलत हैं)?

उदाहरण एक:

public class OrderController 
{ 
    // Injected Repositories 
    private readonly IProductRepository _productRepository; 

    // Called by UI 
    public void AddProduct(int productId) 
    { 
     Order order = ...; // Persisted Order 
     Product product = _productRepository.GetProduct(productId); 
     order.AddProduct(product); 
    } 
} 

नियंत्रक उत्पाद खुद को दर्शाता है और विधि के माध्यम से उस में जोड़ता है:

void AddProduct(Product product) 
{ 
    productList.Add(product); 
} 

उदाहरण दो:

public class OrderController 
{ 
    // Injected Repositories 
    private readonly IProductRepository _productRepository; 

    // Called by UI 
    public void AddProduct(int productId) 
    { 
     Order order = ...; // Persisted Order 
     order.AddProduct(productId, _productRepository); 
    } 
} 

Order डोमेन मॉडल इंजेक्शन उत्पाद भंडार इसे करने के लिए पारित कर दिया है और यह उत्पाद हो जाता है और यह कहते हैं:

Product AddProduct(int productId, IProductRepository productRepository) 
{ 
    Product product = productRepository.GetProduct(productId); 
    productList.Add(product); 

    return product; 
} 

मैं वर्तमान में, पहले उदाहरण के लिए चले गए हैं, क्योंकि आपके डोमेन मॉडल आंतरिक रूप से एक सेवा विधि कॉल कभी नहीं करना चाहिए, फिर भी मैंने हाल ही में कुछ उदाहरण देखे हैं जो मेरे दूसरे उदाहरण का उपयोग करते हैं और यह साफ दिखता है। मुझे लगता है कि उदाहरण एक एनीमिक पर काम कर रहा है। उदाहरण दो सभी उत्पाद जोड़ तर्क को डोमेन मॉडल में ही स्थानांतरित कर देगा।

+0

ऐसा लगता है कि पहला उदाहरण डेटा की लालची लोडिंग की दिशा में एक डिजाइन का नेतृत्व करेगा, और दूसरा आलसी लोडिंग की ओर ले जाएगा। आप इनमें से कौन सा पसंद करते हैं? –

+0

इन-मेमोरी सूची में जोड़े गए उत्पाद के बाद आपका ऑर्डर कैसे सहेजा गया है? क्या कोई जादू हो रहा है (क्षमा करें मुझे सी # पता नहीं है शायद ऑर्डर ऑब्जेक्ट एक ढांचा द्वारा प्रबंधित प्रॉक्सी है?) –

उत्तर

2
के बाद से भंडार डोमेन का हिस्सा नहीं है ऑर्डर करने के लिए उसके हस्ताक्षर पर भंडार नहीं होना चाहिए एक उत्पाद को जोड़ने

दूसरा एक भयानक है ...

मुझे पहले के साथ जाना है।

+0

असल में रिपोजिटरी ** इंटरफेस ** डोमेन का हिस्सा हैं। कंक्रीट कार्यान्वयन डोमेन इंफ्रास्ट्रक्चर का हिस्सा है: http://dddsample.sourceforge.net/architecture.html – GenericTypeTea

+0

जब आप सुपरमार्केट में जाते हैं और कोई आइटम उठाते हैं और अपनी ट्रॉली में जोड़ते हैं तो क्या आप एक रिपॉजिटरी निर्दिष्ट करते हैं? हां भंडार को बुनियादी ढांचे डोमेन के हिस्से के रूप में सोचा जा सकता है लेकिन व्यवसाय डोमेन नहीं। – Aliostad

+0

नहीं, मैं 'IWheel' को लागू करने में बहुत व्यस्त हूं। लेकिन मुझे आपका उदाहरण पसंद है :)। मैंने सोचा कि यह अजीब लग रहा था; यह सबकुछ साफ करता है लेकिन नियमों को पूरा नहीं करता है जैसा कि मैंने उन्हें समझा था। – GenericTypeTea

1

हाँ यार पहले एक बेहतर है ...

के रूप में अगर हम वस्तुओं के रूप में लगता है ...

सूची में उत्पाद जोड़ना उत्पाद भंडार के साथ कोई संबंध नहीं है, यह होना चाहिए केवल उत्पाद ले लो।

+0

उत्पाद वास्तव में उत्पाद है, यह टाइपो गलती थी – Genius

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