2010-08-06 3 views
10

मान लीजिए कि आप अपने कंट्रोलर विकसित करना चाहते हैं ताकि आप अपने द्वारा प्रस्तुत किए गए दृश्यों के लिए डेटा रखने के लिए व्यूमोडेल का उपयोग कर सकें, सभी डेटा ViewModel के भीतर निहित होना चाहिए? ViewModel को बाईपास करना ठीक होगा?ViewModels के बजाय ViewData का उपयोग करने का अधिकार कब है?

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

उत्तर

9

फैबियन की टिप्पणी को आगे बढ़ाने के लिए; आप स्पष्ट रूप से सुनिश्चित कर सकते हैं कि this article में उल्लिखित चरणों का पालन करके व्यूडेटा का कभी भी उपयोग नहीं किया जाता है। सब कुछ के लिए मॉडल का उपयोग करने के लिए वास्तव में कोई बहाना नहीं है नहीं।

यदि आपके पास व्यूडेटा (मौजूदा प्रोजेक्ट पर कहें) का उपयोग करने के अलावा कोई विकल्प नहीं है; 'जादू तार' का उपयोग करने से बचने के लिए नामों को हल करने के लिए कम से कम उपयोग स्ट्रिंग स्थिरांक पर। कुछ पंक्तियों के साथ कुछ: ViewData[ViewDataKeys.MyKey] = myvalue; वास्तव में, मैं इसे "स्ट्रिंग-आधारित" (सत्र कुंजी, कैश कुंजी, VaryByCustom आउटपुट कैश कुंजी, आदि) की आवश्यकता के बारे में कुछ भी करने के लिए उपयोग करता हूं।

+4

+1 - हम हमेशा दृढ़ता से टाइपमोडल्स का उपयोग करते हैं लेकिन additonal 'trim' के छोटे बिट्स के लिए व्यूडेटा का उपयोग करते हैं। यह आम तौर पर आंशिक विचारों में हमारे लिए होता है जिसे विभिन्न स्थानों में पुन: उपयोग किया जाता है। –

+1

@jim: सहमत हैं, परिदृश्य हैं (साझा आंशिक विचारों की तरह) जहां यह अपरिहार्य है; जब आपको व्यूडाटा का उपयोग करने पर फ़ॉलबैक की आवश्यकता होती है तो पैर में खुद को शूट करने से रोकने के लिए उपाय करना सबसे अच्छा है :) – DanP

+0

स्ट्रिंग स्थिरांक बनाम जादू तारों के बारे में आपका क्या मतलब है, और साझा आंशिक दृश्यों में व्यूडेटा का उपयोग क्यों अपरिहार्य है? – Howiecamp

2

मैं व्यक्तिगत रूप से कभी भी व्यूडेटा का उपयोग नहीं करता, सबकुछ मॉडल के माध्यम से जाता है, सिवाय इसके कि जब मैं कुछ परीक्षण कर रहा हूं और मुझे तुरंत दृश्य पर मूल्य देखने में सक्षम होना चाहिए। Strongtyping!

+0

मैं पूरी तरह से सहमत हूं। जादू तार सबसे बदसूरत, और सबसे बुरी परेशानी पर हैं। उस ने कहा, मैं सामान की त्वरित जांच करने के लिए व्यूडेटा का भी उपयोग करता हूं, लेकिन समस्या यह है कि जब यह स्थायी समाधान के रूप में समाप्त होता है! – DaveDev

+0

हाँ - 100% सहमत हैं। मैं पसंद करूंगा अगर इसे भी हटाया जा सके। –

+1

@ शुद्ध। क्रोम: आप निश्चित रूप से मेरी पोस्ट में वर्णित विधि का उपयोग करके मूल्यह्रास अनुकरण कर सकते हैं। बेस नियंत्रक में व्यूडेटा प्रॉपर्टी को ओवरराइड करना और [अप्रचलित()] विशेषता जोड़ने से आपको वही परिणाम मिल जाएगा (अनिवार्य रूप से)। – DanP

1

एएसपी.नेट एमवीसी 2 के संदर्भ में, व्यूमोडेल पैटर्न पसंदीदा दृष्टिकोण है। दृष्टिकोण संकलन समय स्थिर प्रकार की जांच का पूरा फायदा लेता है। compiling mvc views के संयोजन में यह आपके विकास को बहुत तेज़ और अधिक उत्पादक बना देगा क्योंकि रन टाइम के विपरीत निर्माण/संकलन समय के दौरान त्रुटियों का पता लगाया गया है।

3

एक दृष्टिकोण जिस पर आप विचार करना चाहेंगे क्योंकि आपके विचार अधिक जटिल हो जाते हैं, इनपुट फ़ील्ड के लिए मॉडल का उपयोग आरक्षित करना है, और व्यूडेटा का उपयोग किसी और चीज को समर्थन देने के लिए करना है।

तर्कों के कम से कम कुछ इस समर्थन करने के लिए कर रहे हैं:

  1. आप एक मास्टर-पेज है कि कुछ डेटा उपस्थित रहने की आवश्यकता है (जैसे कि शीर्षक में StackOverflow उपयोगकर्ता जानकारी की तरह कुछ)। साइट-व्यापी एक्शनफिल्टर को लागू करने से प्रत्येक क्रिया के बाद व्यूडाटा में इस जानकारी को पॉप्युलेट करना आसान हो जाता है। इसे मॉडल में रखने के लिए यह आवश्यक होगा कि साइट के हर दूसरे मॉडल को बेस मॉडल से प्राप्त किया जाए (यह शुरुआत में खराब नहीं लग सकता है, लेकिन यह जल्दी से जटिल हो सकता है)।

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

मेरे अनुभव में मैंने पाया है कि यह दृष्टिकोण अच्छी तरह से काम करता है।

और, एमवीसी 3 में, dynamic ViewModels का मतलब स्ट्रिंग-इंडेक्सिंग नहीं है!

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