2009-09-16 7 views
39

मैं इस सवाल को फाउलर PoEAA पर आधारित कर रहा हूं। इस पाठ के साथ आपकी परिचितता को देखते हुए, एएसपी.नेट एमवीसी में डीटीओ के समान उपयोग किए गए व्यूमोडल्स नहीं हैं? क्यों या क्यों नहीं? धन्यवाद।दृश्य मॉडल और डेटा स्थानांतरण ऑब्जेक्ट के बीच क्या अंतर है?

उत्तर

71

वे एक समान उद्देश्य (आवेदन की दूसरी परत के लिए डेटा encapsulating) की सेवा करते हैं, लेकिन वे इसे अलग-अलग और विभिन्न कारणों से करते हैं।

  • एक डीटीओ के प्रयोजन विशेष रूप से जब उन कॉल महंगा (जैसे वितरण प्रणाली) कर रहे हैं, एक आवेदन के स्तरों के बीच कॉल की संख्या को कम करना है। डीटीओ लगभग हमेशा तुच्छ रूप से क्रमिक होते हैं, और लगभग कभी भी कोई व्यवहार नहीं होता है।

    उदाहरण के लिए, आप एक ई-कॉमर्स साइट विकसित कर रहे हैं। CreateCustomer और AddCustomerAddress डेटाबेस स्तर पर अलग-अलग ऑपरेशन हैं, लेकिन आप प्रदर्शन कारणों से अपने डेटा को NewCustomerWithAddressDto में जोड़ना चाहते हैं ताकि आपके क्लाइंट को केवल सर्वर पर एक राउंड-ट्रिप करने की आवश्यकता हो, और इसकी परवाह नहीं है सर्वर डेटा के पार्सल के साथ विभिन्न चीजों का एक गुच्छा कर रहा है।

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

    उदाहरण के लिए, एक ही ई-कॉमर्स एप्लिकेशन में, आपके CustomerModel आपके "नए ग्राहक" व्यू पर प्रस्तुति के लिए गलत "आकार" है। स्टार्टर्स के लिए, आपके व्यू में आपके उपयोगकर्ता के प्रवेश और पुष्टि करने के लिए दो फॉर्म फ़ील्ड हैं, और आपके CustomerModel में पासवर्ड फ़ील्ड बिल्कुल नहीं है! आपके NewCustomerViewModel में एमवी * के आपके स्वाद के आधार पर उन फ़ील्ड और हो सकते हैं, कुछ प्रस्तुति तर्क (उदा। दृश्य के हिस्सों को दिखाने/छिपाने के लिए) के लिए ज़िम्मेदार रहें और बुनियादी सत्यापन (उदाहरण के लिए दोनों पासवर्ड फ़ील्ड मिलान करें)। MVVM और एमवीपी में

+0

यह एक उत्कृष्ट स्पष्टीकरण है! अब तक केवल एकमात्र दृश्य मॉडल जो मैंने देखा था, केवल गेटर्स और सेटर्स थे इसलिए मैं ऐसा था: वाह यह एक डीटीओ की तरह है। मेरे लिए इसे साफ़ करने के लिए धन्यवाद। – mkelley33

11

उद्देश्य अलग है:

  • डीटीओ के डेटा
  • ViewModels अंतिम उपयोगकर्ता को डेटा दिखाने के लिए उपयोग किया जाता है हस्तांतरण करने के लिए उपयोग किया जाता है।

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

10

DTOs आमतौर पर बहुत बेवकूफ वस्तुओं हैं और मूल रूप से सिर्फ संपत्ति setters और getters का एक समूह है। दूसरी ओर ViewModels कुछ व्यवहार हो सकता है।

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

+3

+1, मुख्य अंतर यह है कि डीटीओ बेवकूफ हैं (और इस प्रकार त्रिकोणीय रूप से धारावाहिक, जो उनका * नौकरी * है), और व्यू मॉडल्स में तर्क शामिल हो सकता है जो अन्यथा आपके विचार में चला जाता है (जो * उनका * काम है)। –

+0

@ इगोर ज़्वकाका क्या आप कृपया समझ सकते हैं कि व्यवहार से आपका क्या मतलब है? –

1

एक दृश्य मॉडल और डेटा स्थानांतरण ऑब्जेक्ट में समानताएं और मतभेद हैं।

समान: एक रिसीवर के लिए एक रिकॉर्ड में स्थानांतरण डेटा (वस्तु दृष्टान्त, शायद धारावाहिक), एक दृश्य या एक सेवा है कि क्या

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

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