asp.net mvc - दृश्य मॉडल और डेटा स्थानांतरण ऑब्जेक्ट के बीच क्या अंतर है?




asp.net-mvc design-patterns (3)

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


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

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

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


एक व्यू मॉडल और डेटा ट्रांसफर ऑब्जेक्ट में समानताएं और अंतर होते हैं।

इसी प्रकार: किसी रिसीवर को रिकॉर्ड (ऑब्जेक्ट इंस्टेंस, शायद क्रमबद्ध) में डेटा स्थानांतरित करें, चाहे कोई दृश्य या सेवा हो

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


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

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

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

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

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





poeaa