2011-08-23 6 views
15

मुझे पहली बार डीडीडी (नेट में) के साथ अपने पैरों को गीला कर रहा है, क्योंकि मैं विरासत एंटरप्राइज़ एप्लिकेशन के कुछ मूल घटकों को पुन: आर्किटेक्ट कर रहा हूं।डीडीडी और कार्यान्वयन दृढ़ता

कुछ मैं साफ़ करना चाहता हूं, हम उचित डीडीडी आर्किटेक्चर में दृढ़ता को कैसे लागू करते हैं?

मुझे एहसास है कि डोमेन स्वयं निरंतर अनजान हैं, और उन्हें "सर्वव्यापी भाषा" का उपयोग करके डिजाइन किया जाना चाहिए और निश्चित रूप से महीने के डीएसी की बाधाओं या यहां तक ​​कि भौतिक डेटाबेस में मजबूर नहीं होना चाहिए।

क्या मैं सही हूं कि रिपोजिटरी इंटरफेस डोमेन असेंबली के भीतर रहते हैं, लेकिन रेस्पोजिटरी कार्यान्वयन दृढ़ता परत के भीतर मौजूद है? दृढ़ता परत में डोमेन परत का संदर्भ होता है, कभी विपरीत नहीं?

मेरे वास्तविक भंडार विधियों (सीआरयूडी) कहां से बुलाए जा रहे हैं?

उत्तर

10

मैं सही हूँ कि भंडार इंटरफेस डोमेन विधानसभा के भीतर रहते हैं, लेकिन भंडार क्रियान्वयन हठ परत के भीतर मौजूद हैं? दृढ़ता परत में डोमेन परत का संदर्भ होता है, कभी विपरीत नहीं?

हां, यह एक बहुत अच्छा दृष्टिकोण है।

मेरे वास्तविक भंडार विधियों (सीआरयूडी) कहां से बुलाए जा रहे हैं?

सीआरयूडी शब्दों में नहीं सोचना एक अच्छा विचार हो सकता है क्योंकि यह बहुत डेटा केंद्रित है और आपको Generic Repository Trap में ले जा सकता है। Repositorydomain objects के लिए मध्य और जीवन के अंत को प्रबंधित करने में मदद करता है। Factories अक्सर शुरुआत के लिए जिम्मेदार होते हैं। ध्यान रखें कि जब डेटाबेस डेटाबेस से बहाल किया जाता है तो यह डीडीडी परिप्रेक्ष्य से अपने मध्यकालीन चरण में होता है। इस प्रकार कोड कैसा दिख सकता है:

// beginning 
Customer preferredCustomer = CustomerFactory.CreatePreferred(); 
customersRepository.Add(preferredCustomer); 

// middle life 
IList<Customer> valuedCustomers = customersRepository.FindPrefered(); 

// end life 
customersRepository.Archive(customer); 

आप इस कोड को सीधे अपने आवेदन से कॉल कर सकते हैं। यह इवान के DDD Sample को डाउनलोड करने और देखने के लायक हो सकता है। Unit of Work पैटर्न आम तौर पर लेनदेन से निपटने और पसंद के आपके ओआरएम को सारणित करने के लिए नियोजित किया जाता है।

+3

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

+1

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

+0

@RobinvanderKnaap, यह सच नहीं है, वास्तविक समय सॉफ्टवेयर विकास की स्थिति में, एप्लिकेशन सेवा परत की आवश्यकता होती है। यदि आप UI dev टीम को डोमेन लेयर देते हैं, तो यह हो सकता है) इसका उपयोग कैसे करें, बी) इसका दुरुपयोग कर सकते हैं। आपको अपने व्यापार API (डोमेन लेयर) के साथ यूआई क्या कर सकता है इसके बारे में स्पष्ट होना चाहिए। –

2

इस विषय पर Steve Bohlenhas to say देखें। प्रस्तुति के लिए कोड here पाया जा सकता है।

मैं प्रेजेंटेशन में था और रिपॉजिटरीज को मॉडल कैसे मॉडल करना है, इस बारे में जानकारी मिली।

+0

बहुत अच्छा, निश्चित रूप से मैंने देखा है कि डीडीडी के लिए सबसे सीधे आगे परिचय। कोड अच्छा है क्योंकि यह वहां के कई अन्य उदाहरणों की तरह फैंसी नलसाजी से घिरा हुआ नहीं है। दुर्भाग्यवश यह चीजों के वास्तविक प्रत्यारोपण पक्ष पर थोड़ा सा प्रकाश है, जिसे मैं वास्तव में सहायता प्राप्त करने की कोशिश कर रहा था। – EkoostikMartin

0

मैं सही हूँ कि भंडार इंटरफेस डोमेन विधानसभा के भीतर रहते हैं, लेकिन भंडार क्रियान्वयन हठ परत के भीतर मौजूद हैं? दृढ़ता परत में डोमेन परत का संदर्भ होता है, कभी विपरीत नहीं? ,

  • प्रस्तुति परत (रूपों, वेब प्रपत्रों, asp.net MVC, WPF, php, क्यूटी, जावा जीत,:

मैं यहाँ असहमत हैं, मान लीजिए कि एक प्रणाली निम्नलिखित परतों के शामिल है चलो आईओएस, एंड्रॉइड, आदि)

  • व्यापार लेयर (कभी कभी कहा जाता प्रबंधकों या सेवाओं, तर्क यहाँ जाता है)
  • संसाधन पहुँच लेयर (स्वयं या ORM)
  • संसाधन/भंडारण (RDBMS, NoSQL, आदि)
  • धारणा यहां यह है कि जितना अधिक आप परत अधिक अस्थिर होते हैं (उच्चतम प्रस्तुति और संसाधन/भंडारण निम्नतम होता है)। ऐसा इसलिए है कि आप संसाधन परत परत को व्यावसायिक परत संदर्भित नहीं करना चाहते हैं, यह दूसरी तरफ है! व्यवसाय परत संसाधन पहुंच परत का संदर्भ देती है, आप नीचे यूपी कॉल नहीं करते हैं!

    आप इंटरफेस/कॉन्ट्रैक्ट्स को अपनी असेंबली में डाल देते हैं, उनके पास व्यापार स्तर में कोई उद्देश्य नहीं है।