5

मैंने इसे एसओ, ब्लॉग और किताबों पर देखा है, जहां लेखकों ने आपको अपने मॉडल प्रोजेक्ट्स में अपने व्यू के लिए व्यूमोडल्स को अपने अंतर्निहित मॉडल ऑब्जेक्ट्स के लिए रैपर के रूप में जोड़ा है। विचार यह है कि जब आप दृश्य को बाध्यकारी मॉडल करते हैं तो इसे बहुत सरल और लक्षित करना है। यहां एक अच्छा उदाहरण है: Rendering and Binding Drop Down Lists using ASP.NET MVC 2 EditorForSystem.Web.Mvc के ViewModels और संदर्भों का उपयोग करते हुए एमवीसी पैटर्न का उल्लंघन करता है?

हालांकि, यह मुझे थोड़ा परेशान करता है कि मेरे मॉडल में System.Web.Mvc के संदर्भ हैं, जो अन्यथा एकाधिक आउटलेट (शायद डब्ल्यूसीएफ एपीआई, सिल्वरलाइट इत्यादि) के लिए इस्तेमाल किया जा सकता था।), लेकिन अब मेरे पास एमवीसी डीएल के विशिष्ट संदर्भ हैं जिन्हें मेरे मॉडल प्रोजेक्ट को बनाने की आवश्यकता होगी।

मेरा प्रश्न है: क्या हम हमारे मॉडल वर्गों में IEnumerable<SelectListItem> जोड़ना शुरू करते हैं तो यह एमवीसी पैटर्न का उल्लंघन करता है? और क्या इसे स्थानांतरित करने के लिए एक व्यवहार्य वैकल्पिक परत है, यानी नियंत्रक?

किसी भी विचार या टिप्पणियों की सराहना की।

+0

यहां से नमूना एमवीसी प्रोजेक्ट पर एक नज़र डालें http://valueinjecter.codeplex.com/, यह व्यूमोडल्स – Omu

उत्तर

5

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

उदाहरण के रूप में देने का वादा किया -, ध्यान में रखते हुए selectList बनाने सब सामान्य दृश्य इंजन बिट्स के प्रयोग ...

<%= Html.ListBox("SelectedStuff", 
     new SelectList(Model.SomeOptions, "id", "name", Model.SelectedStuff)) %> 
+0

में किसी भी तरह का तर्क किए बिना किया जाता है, फ्लाई पर चुनिंदा सूचियां बनाते हुए आपको टाइप किए जाने से रोकते हैं विचार और उनके एचटीएमएल हेल्पर विधि समकक्ष? – mirezus

+0

नहीं - आप बस दृश्य के अंदर चयन सूची बनाते हैं ... मैं अपने उत्तर में एक उदाहरण जोड़ूंगा। – Fenton

+0

यह मेरे लिए सिर्फ बदसूरत दिखता है;) मैं हमेशा अपने व्यू मॉडल के लिए एक नियंत्रक (जो एमवीसी विशिष्ट भी है) के लिए IENumerable बनाता है और क्लीनर दृश्य प्राप्त करता है। – Necros

1

नहीं है, ViewModels देखें द्वारा सेवन किया जा करने के लिए और अपने वेब में स्थित होना चाहिए होती हैं परियोजना। हालांकि, आपके वास्तविक मॉडल में एमवीसी या आपकी वेब प्रोजेक्ट का कोई संदर्भ नहीं होना चाहिए। अपने व्यू मॉडेल को अपने मॉडल से वेब व्यू को ब्रिजिंग के रूप में सोचें।

3

इस MVC पैटर्न का उल्लंघन करता है जब हम हमारे मॉडल वर्गों के लिए IEnumerable जोड़ना शुरू ?

वास्तव में नहीं, लेकिन यदि आप डोमेन ड्राइव डिज़ाइन का उपयोग करने की कोशिश कर रहे हैं या आपके व्यापार की परत और एमवीसी/प्रेजेंटेशन लेयर के बीच चिंताओं को अलग करना चाहते हैं तो यह उल्लंघन है।

  • मॉडल अपने संस्थाओं, अपने डोमेन, अपने व्यवसाय परत वस्तुओं रहे हैं।

  • व्यूमोडेल आपकी स्क्रीन हैं, पोस्टिंग, डेटा बाल्टी प्रदर्शित करें।

मॉडल मॉडल को मानचित्र में देखें जिसमें एमवीसी आश्रित आइटम हो सकते हैं। सोचें कि यह इस तरह से है, ViewModels सीधे एमवीसी के लिए हैं। मॉडल एक सेवा, Winform, WPF या व्यापार sytem प्रणाली की किसी भी प्रोग्रामेटिक प्रस्तुति के लिए हो सकता है।

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