2009-07-10 4 views
6

मुझे बिंदु (अनजाने में) मिल गया है कि मुझे कुछ हिस्सों में लगता है कि मैं दृश्य (.aspx) के भीतर बहुत अधिक कर रहा हूं, बहुत अधिक स्वरूपण, concatenation, एक जगह में थोड़ा regex प्रतिस्थापन।एएसपी.NET एमवीसी में मॉडल देखना चाहिए सभी तारों?

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

public class FinanceQuoteView 
{ 
    public string Provider; 
    public string Broker; // rather than Broker == null ? "N/A" : Broker.ToUpperCase(); 
    public string Monthly; // rather than Monthly.ToString("C") 
    public string PaymentTerm; // rather than "1+" + PaymentTerm.ToString(); 
    public string FreeInsurance; // rather than insuranceIncluded ? "Yes" : "No"; 
    public string[] Restrictions; 
} 

फ़ॉर्म सबमिशन के लिए (जोड़ने, संपादित) मैं एक अलग दृश्य मॉडल नियंत्रक कार्रवाई (प्रपत्र मॉडल यदि आप में/मॉडल/बनेगी) को खिलाने के लिए इस्तेमाल करते हैं। तो FinanceQuoteForm में द्विआधारी आदि शामिल है ... एक बांधने की मशीन के माध्यम से बनाया गया।

हर कोई इस दृष्टिकोण के बारे में क्या सोचता है? मॉडल को देखने के लिए डोमेन से मैपिंग में। टोस्टिंग ("सी") कर रहा है?

उत्तर

3

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

+0

वह डोमेन मॉडल के बारे में बात नहीं कर रहा है - वह व्यू मॉडल के बारे में बात कर रहा है। –

+0

मार्क। सही बात। मैं अपने मॉडल का जिक्र नहीं कर रहा हूं। मैं विशेष रूप से अपने व्यू मॉडल का जिक्र कर रहा हूं कि मेरे नियंत्रक क्रियाएं उत्पन्न होती हैं (या तो मैन्युअल रूप से, ऑटोमैपर या जो कुछ भी - छोटे इंपोर्ट विवरण) और प्रतिपादन के लिए दृश्य को भेजें। –

+1

मैं सीके पर सहमत हूं, मॉडल देखें "प्रारूप" डेटा वाला एक है। केवल तारों को पार करके, आप डेटा को प्रारूपित करने के लिए मॉडल को देखने का मौका खो देते हैं। मेरे पास एक साधारण उदाहरण हो सकता है, यह है कि यदि आप मॉडल को देखने के लिए स्ट्रिंग के रूप में "दिनांक" पास करते हैं, तो आपको अमेरिकी विज़िटर या यूके विज़िटर को सामग्री की सेवा करने के लिए नियंत्रक में आगे हेरफेर की आवश्यकता होती है। – xandy

1

मैं अपने द्वारा डिजाइन किए गए दृश्य मॉडल के लिए स्ट्रिंग्स की ओर बहुत भारी झुकाव करता हूं। आखिरकार, व्यू में प्रदर्शित अधिकांश डेटा तारों का रूप लेता है। जब भी मैं व्यू (.aspx/.ascx) में डेटा मैनिपुलेशन करने जा रहा हूं, तो मैं गंभीरता से उस दृश्य को अपने दृश्य मॉडल पर धक्का देने पर विचार करता हूं ताकि मैं इकाई का परीक्षण कर सकूं। आखिरकार, टेस्टेबिलिटी प्रमुख लाभ है जो आपको एमवीसी से मिलता है, तो इसका उपयोग क्यों न करें?

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

सभी डेटा को स्ट्रिंग के रूप में एन्कोड किए गए सर्वर और ब्राउज़र के बीच राउंड-ट्रिप करना है, अक्सर, आप इसके बारे में स्पष्ट होंगे।

मैं निश्चित रूप से यह बहुत ज्यादा है नहीं लगता है - मैं केवल लगता है कि आप यह बहुत कम :)

+1

"जब भी मैं व्यू (.aspx/.ascx) में डेटा मैनिपुलेशन करने वाला हूं, तो मैं गंभीरता से उस दृश्य को अपने दृश्य मॉडल पर धक्का देने पर विचार करता हूं ताकि मैं इकाई का परीक्षण कर सकूं।" क्या आप उस भाग पर विस्तार से बता सकते हैं? मैं संपादन के लिए एक अलग दृश्य मॉडल के मार्ग पर जा रहा था लेकिन मुझे आपके दृष्टिकोण में दिलचस्पी है –

+2

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

0

आपका स्थिति तेजी से कर सकते हैं बहुत ही खास है और एक तरह से सीमित होने के लिए: अपने ViewModel या तो संपादन या प्रदर्शित करने के लिए है । अधिकांश दृश्य दोनों करते हैं: उनके पास कुछ संपादन सामग्री का जवाब देने के लिए बहुत सी डिस्प्ले सामग्री होती है। आइए यह पृष्ठ देखें:

प्रश्न, उत्तर और नोट प्रदर्शित करें। संपादित करें: उत्तर।

मैं 2 को अंतर नहीं करना चाहता। यह बहुत सारे प्रदर्शन क्षेत्रों के डुप्लिकेशंस में समाप्त होगा।

मुझे संभवतः 2 गुणों के साथ एक दृश्य होगा: एक प्रदर्शन के लिए और एक फॉर्म मान के लिए।

1

सहमत हैं, ज्यादातर। पारंपरिक संपादन रूपों के लिए, मैं 'पोस्ट मॉडल' (नियंत्रक को पास) के लिए अलग-अलग मॉडल और दृश्य/संपादन 'दृश्य मॉडल' (दृश्य में पारित) के लिए अलग-अलग मॉडल रखना पसंद करता हूं।

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

पोस्ट मॉडल मेरे नियंत्रक क्रिया को खिलाता है जो तब निर्धारित करता है कि कौन सा आदेश निष्पादित करना है, यदि कोई हो।

वहां से, यदि नियंत्रक कार्रवाई दृश्य/संपादन पृष्ठ देखने में परिणाम देती है, तो मैं तदनुसार दृश्य मॉडल का निर्माण करता हूं, और इसे दृश्य में आपूर्ति करता हूं।

इसलिए, मैं अपने विचार मॉडल के गुण जो भी प्रकार चाहता हूं उसे बना सकता हूं। उन्हें पोस्ट मॉडल के प्रकार से मेल नहीं खाते हैं।

सुपर साफ, और मुझे सबकुछ पर पूर्ण नियंत्रण देता है।

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