2012-10-13 33 views
26

डोमेन परत (डीएल)/बिजनेस (सर्विस) लेयर (बीएल)/प्रेजेंटेशन लेयर (पीएल) के साथ एक बहु-परत परियोजना में, प्रेजेंटेशन लेयर में इकाइयों को वितरित करने का सबसे अच्छा तरीका क्या है?डोमेन बनाम डीटीओ बनाम व्यूमोडेल - उन्हें कैसे और कब उपयोग करें?

DO => Domain Object; 
DTO = Domain Transfer Object; 
VM => View Model; 
V => View; 

विकल्प 1:

DL => DO => BL => DTO => PL => VM => V 

यह विकल्प बेस्ट प्रैक्टिस प्रतीत हो रहा है, लेकिन यह भी mantain करने के लिए भारी लगता है।

विकल्प 2:

DL => DO => BL => DTO => PL => V 

यह विकल्प बहुत अच्छा अभ्यास नहीं लगता है, लेकिन के रूप में डीटीओ वीएम के लिए लगभग समान हैं, हम इसे सीधे देखें पारित कर सकते हैं और इसे लागू और mantain करने के लिए कम painfull है।

क्या यह विकल्प कई लेआउट के लिए भी विश्वसनीय है, उदाहरण के लिए, मोबाइल उपकरणों के लिए मुझे बीएल से कम जानकारी की आवश्यकता हो सकती है, इसलिए मुझे इस विशेष लेआउट के लिए एक अलग वीएम की आवश्यकता होगी?

उत्तर

1

यदि आपके पास अलग-अलग विचार होने जा रहे हैं जिसके लिए आपके डीटीओ से अलग-अलग डेटा की आवश्यकता है, तो ऐसा लगता है कि आप इनके लिए अलग-अलग दृश्य मॉडल रखने से लाभ उठा सकते हैं और इन्हें अपने डीटीओ को मैप कर सकते हैं।

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

+0

आपके उत्तर के लिए धन्यवाद, तो आप कह रहे हैं कि प्रत्येक डीटीओ के पास एक मानसिक दृष्टिकोण में अपना स्वयं का वीएम होना चाहिए? – Patrick

+0

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

+0

हमेशा आपके डोमेन, टीम और प्रोजेक्ट के आकार पर निर्भर करता है। – dove

10

डीटीओ को देखने के लिए पास करना ठीक है। यदि आपको डीटीओ को बदलने या बढ़ाने की आवश्यकता है तो व्यूमोडेल बनाएं। लिंक जोड़ने के लिए एक आम परिदृश्य होगा। एक जटिल संपत्ति के रूप में डीटीओ को संदर्भित करने के लिए व्यूमोडेल के लिए भी ठीक है।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन कुछ स्थितियों में विकल्प 1 और अन्य विकल्पों में उपयोग करने के बजाए हमेशा एक ही आर्किटेक्चर का उपयोग करना बेहतर नहीं होगा 2? – Patrick

+3

मैं कहूंगा कि कार्य को पूरा करने के लिए सही तकनीक का उपयोग करें। मैं एक दृश्य मॉडल बनाने के लिए एक दृश्य मॉडल बनाने की अनुशंसा नहीं करता। –

+1

@ पैट्रिक स्थिरता हां के लिए। यही कारण है कि मैंने कहा 'ठीक है' और 'सर्वश्रेष्ठ नहीं' अभ्यास '। मेरी पसंद हमेशा व्यूमोडेल बनाना और डीटीओ को एक जटिल संपत्ति के रूप में संदर्भित करना है। –

0

यहाँ देखें मेरा जवाब: https://stackoverflow.com/a/14059156/1288063

आप कहते हैं: यह विकल्प बेस्ट प्रैक्टिस प्रतीत हो रहा है, लेकिन यह भी mantain करने के लिए भारी लगता है।

शायद लागू करने के लिए भारी, कोड की बस कुछ पंक्तियों को डुप्लिकेट करने के लिए, लेकिन निश्चित रूप से बनाए रखने के लिए।

0

मेरे लिए यह निर्णय इस बात पर आधारित है कि मैंने अपना सत्यापन तर्क कहां रखा है।

परिदृश्य # 1: व्यूमोडेल (यूआई परत में) में डेटा एनोटेशन जोड़ना प्रोग्रामिंग को बहुत सरल बनाता है। ज्यादातर डीटीओ के बीच एक मानचित्रण पर और मॉडल देखने के लिए एक होगा। ऐसे मामलों में विकल्प 1 अच्छा है। डीएल => डीओ => बीएल => डीटीओ => पीएल => वीएम => वी

परिदृश्य # 2) यदि सत्यापन ViewModels से जुड़ा हुआ नहीं है तो डीटीओ को व्यूमोडेल और व्यूमोडेल के साथ बदल दिया गया है जो बिजनेस लेयर में रहता है। डीएल => डीओ => बीएल => वीएम => पीएल => वी

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