2009-11-24 8 views
11

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

हम निम्नलिखित तकनीकों का उपयोग करने का फैसला किया है EF4 (वास्तव में v2), एकता

जानकारी की मात्रा मैं प्राप्त कर लिया है सबसे ज्ञानवर्धक कर दिया गया है, फिर भी, मैं सबसे अच्छा में कई सवाल के साथ छोड़ दिया हूँ अभ्यास:

प्रश्न # 1:DTOs - उत्तम आचरण

मैं अपने डोमेन वस्तुओं (POCO वर्ग) की है। इन वर्गों को लागू करने के कई तरीके हैं।

  1. परंपरागत दृष्टिकोण: POCO वर्ग है जो सार्वजनिक getters/setters, मान्यता, & उचित व्यापार तर्क समाहित हों। डीटीओ भी बनाएं और उन्हें प्रबंधित करने के लिए मैपिंग तकनीकों का उपयोग करें। (ऑटोमैपर)
  2. पारंपरिक - डीटीओ: उपरोक्त वर्णित पीओसीओ कक्षाएं बनाएं, हालांकि, अपने पीओसीओ को स्थानांतरण वस्तुओं के रूप में उपयोग करें। यह मेरी समझ है कि व्यवसाय वस्तुओं को कभी भी डोमेन छोड़ना नहीं चाहिए।
  3. हाइब्रिड: मैं एक दिलचस्प blog post जिसमें लेखक ने अपने POCO वस्तुओं और DTOs बनाता है पर ठोकर खाई। अपने डोमेन ऑब्जेक्ट के अंदर वह डीटीओ का एक उदाहरण बनाता है। यह आसान रखरखाव की अनुमति देता है क्योंकि आप # 1 में अपनी गुणों को डुप्लिकेट नहीं कर रहे हैं। इसलिए जैसा:
 
public abstract class POCOBase<T> : ValidationBase, IPOCO where T : DTOBase, new() 
{ 

public T Data { get; set; } 

public POCOBase() 
{ 
    Data = new T(); 
} 

public POCOBase(T dto) 
{ 
    Data = dto; 
} 
    } 

    public class SomePOCO : POCOBase { } 

    public class SomeDTO : DTOBase 

    { 

public String Name { get; set; } 

public String Description { get; set; } 

public Boolean IsEnabled { get; set; } 
} 


// EXAMPLES 
// POCOBase<SomeDTO> somePOCO = new SomePOCO(); 
// somePOCO.Data.Name = "blablabla"; 
// somePOCO.Validate(); 
// return somePOCO.Data; 

प्रश्न # 2:क्या वस्तुओं यूआई/सेवा परत द्वारा दिया जाना चाहिए?

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

उदाहरण के लिए, कहें कि मैं अमेज़ॅन के एपीआई के साथ काम कर रहा हूं। मैं अपनी व्यक्तिगत दुकान में एक पुस्तक जोड़ना चाहता हूं। अगर मैं अपनी आईएसबीएन भेजने के बिना कोई पुस्तक जोड़ने की कोशिश करता हूं, तो सेवा शायद किसी प्रकार का प्रतिक्रिया समूह लौटाएगी जिसमें सत्यापन परिणाम त्रुटियां होंगी।

मैं कुछ याद आ रही है? मैं इंप्रेशन के तहत था (कम से कम डीडीडी "शुद्धवादियों" से) कि डीटीओ में कोई व्यावसायिक तर्क नहीं होना चाहिए। ऐसा लगता है कि डीटीओ स्थानांतरण वस्तुओं के रूप में पर्याप्त जानकारी प्रदान नहीं करते हैं। या तो मुझे या मुझे एक नई प्रकार की प्रतिक्रिया वस्तु की आवश्यकता है जो डीटीओ और सत्यापन परिणामों को समाहित करता है।

प्रश्न # 3:आईओसी कितना अधिक है?

"आवेदन कि अलग-अलग भागों को पहचानें, और उन है कि एक ही रहने से अलग:

यह मेरे लिए स्पष्ट हो गया कि मैं सुनहरा नियम का पालन करना चाहिए लगता है।"

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

मुझे आशा है कि मैंने इन प्रश्नों को स्पष्ट रूप से बताया है। धन्यवाद अग्रिम में आपकी सहायता के लिए!

+2

भविष्य में, कृपया प्रत्येक प्रश्न को एक अलग स्टैक ओवरफ्लो प्रश्न के रूप में बताएं ... –

उत्तर

18

मैं एक समय में आपके प्रश्नों को हल करने का प्रयास करूंगा।

उत्तर 1

DTOs DDD क्योंकि वे एक आवेदन की वास्तुकला में एक अलग जगह में एक अलग उद्देश्य पूरा ओर्थोगोनल हैं। उस ने कहा, डीटीओ के पास डोमेन मॉडल में कोई स्थान नहीं है क्योंकि उनके पास कोई व्यवहार नहीं है और इस प्रकार Anemic Domain Models तक पहुंच जाएगा।

दृढ़ता के साथ पीओसीओ अज्ञानता जाने का रास्ता है। जेरेमी मिलर का अच्छा article that explains this concept है।

उत्तर 2

परतें कि डोमेन मॉडल के शीर्ष पर बैठने अक्सर अपनी वस्तुओं है कि प्रश्न में इस प्रयोजन के लिए अनुरूप हैं वापस जाने के लिए की आवश्यकता होगी।

यूआई के लिए, एमवीवीएम पैटर्न विशेष रूप से अच्छी तरह से काम करता है। This article WPF के लिए एमवीवीएम प्रस्तुत करता है, लेकिन पैटर्न एएसपी.नेट एमवीसी में एक आकर्षण की तरह काम करता है।

वेब सेवाओं के लिए, यह वह जगह है जहां डीटीओ पैटर्न लागू होता है। डब्ल्यूसीएफ डेटा अनुबंध डीटीओ हैं, यदि आप सोच रहे थे :)

यह सेवा इंटरफ़ेस और डोमेन मॉडल के बीच आगे बढ़ने के लिए बहुत सारे मानचित्रण की आवश्यकता होगी, लेकिन यह कीमत आपको पूरक डिजाइन के लिए भुगतान करना है। आप इस संबंध में AutoMapper सहायक पा सकते हैं।

उत्तर 3

अधिक आईओसी (वास्तव में: डीआई) बेहतर है, लेकिन आपके सवाल के बारे में बात मुझे मारा: एक डि कंटेनर केवल वस्तु ग्राफ ऊपर तार चाहिए और फिर रास्ते से हट जाओ। वस्तुओं को डी कंटेनर पर भरोसा नहीं करना चाहिए।

अधिक जानकारी के लिए this SO answer देखें।

+0

आपकी टिप्पणी मार्क के लिए धन्यवाद। यह मेरी समझ है कि एनीमिक डोमेन मॉडल तब आते हैं जब डोमेन ऑब्जेक्ट किसी भी व्यावसायिक तर्क से रहित होते हैं। वे गेटर्स/सेटर्स के बैग बने रहते हैं। एडीएम का एक और बिंदु तब होता है जब तर्क (जैसे सत्यापन) वस्तु के बाहर होता है बल्कि भीतर निहित होता है। यदि आप लगातार # अज्ञात डोमेन ऑब्जेक्ट के अंदर एक डीटीओ उदाहरण बनाने के लिए प्रश्न # 1 हाइब्रिड दृष्टिकोण पर वापस देखते हैं, तो यह आवश्यक रूप से यह एक एनीमिक डोमेन मॉडल नहीं बनता है। आप सही हैं, हालांकि यह डीडीडी प्रिंसिपल को तोड़ देता है। मुझे शायद इसे थोड़ा और अधिक खोदना होगा। – Daniel

+0

उत्तर 2 सही था। मुझे झुकाव था कि मुझे कस्टम रिटर्न ऑब्जेक्ट्स बनाने की आवश्यकता हो सकती है। एमवीवीएम पर सलाह के लिए धन्यवाद ... निश्चित रूप से एक नज़र डालेंगे। – Daniel

+0

मैं वर्तमान में अपने एएसपी.NET वेब.कॉन्फिग में अपने डी कंटेनर को कॉन्फ़िगर कर रहा हूं, फिर इसे स्थापित करने के लिए Global.asax का उपयोग कर रहा हूं। आपके उत्तर 3 के लिए, यदि मैं आपको सही ढंग से समझता हूं: तो टीडीडी विधियों को लागू करने के लिए, मुझे केवल विधि पर ही डी कॉन्फ़िगरेशन पंजीकृत करना चाहिए "ऑन-द-फ्लाई"? – Daniel

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