2011-07-18 11 views
21

क्या देखना चाहिए कि मॉडल केवल गुणों तक ही सीमित हों, न कि तरीकों से?एएसपी.नेट एमवीसी व्यू मॉडेल विधियों के साथ - क्या यह "कानूनी" है?

मान लें कि मेरे पास मेरे दृश्य में एक रेडियो बटन है, और यह देखना चाहता है कि रेडियो बटन की जांच की जानी चाहिए या नहीं।

मैं पूरी तरह मेरे विचार में ऐसा कर सकता है:

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 

या मैं viewmodel में इस तर्क को स्थानांतरित कर सकते हैं:

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id) 

viewmodel में इस पद्धति का उपयोग:

public int PersonId { get;set;} 
    public bool IsChecked(int id) 
    { 
     return (id == PersonId); 
    } 

क्या यह ठीक है, या इसे पूरी तरह से दृश्य में किया जाना चाहिए, या किसी अन्य तरीके से किया जाना चाहिए?

+0

अभ्यास है - यदि यह दृश्य की प्रशंसा करता है तो हाँ यह ठीक है। यह भी एक लंबा रास्ता फैलाया जा सकता है :) जब तक यह एक कंसिस तरीके से करने के लिए आपको क्या करना है। इसके बारे में चिंता मत करो। – ppumkin

उत्तर

12

आपके पास ViewModel में विधियां हो सकती हैं। यदि यह एकमात्र परिणाम है, तो आप प्रत्येक बार गणना करना चाहते हैं, तो मैं आपके Controller पर मूल्यांकन कोड जोड़ने और इसके परिणामस्वरूप ViewModel में परिणाम संग्रहीत करने का सुझाव दूंगा लेकिन यदि आपको किसी विधि का उपयोग करके चीजों का मूल्यांकन करने की आवश्यकता है और एक संपत्ति नहीं कर सकती यह आपके लिए ViewModel में ऐसा करने के लिए शायद ठीक है।

अपने उपरोक्त उदाहरण मैं ViewModel में ऐसा करने की सलाह देते हैं के रूप में तो ViewModel बल्कि यह कई बार कॉपी करें और अपने View में चिपकाया कर की तुलना में एक ही स्थान पर तर्क होता है।

+0

ऐसा कहा जाता है कि व्यूमोडेल में कोई तर्क मौजूद नहीं होना चाहिए। वह सबसे अच्छा कोडिंग अभ्यास। लेकिन यह देखने के लिए एक अच्छी कार्यक्षमता है कि मॉडल को अपने सभी गुणों को एक पोस्टबैक पर ऐसा करने के लिए एक कॉलबैक पर अपडेट करें। (व्यापार तर्क हालांकि अलग हो गया है। केवल लिंक और डेटा प्राप्त करना) मुझे एहसास हुआ कि यदि आप अपने विचार में कोई संपत्ति घोषित नहीं करते हैं कि डेटा WONT क्लाइंट, अवधि में भेजा जाता है। तो यह "संरक्षित" है - बस सावधान रहें कि आप संपत्तियों का खुलासा कैसे करते हैं :) – ppumkin

4

यह तर्क के सही प्लेसमेंट के बारे में वास्तव में एक अच्छा सवाल है। आपका दृष्टिकोण निश्चित रूप से कानूनी है - लेकिन क्या यह एमवीसी की भावना का पालन करता है? :)

मैं कहेंगे इस पर अपनी पद्धति में तर्क सिर्फ इस देखें/ViewModel पर लागू होता है कि क्या निर्भर करता है, या संभवतः (आपके मामले में अन्य ViewModels कि यह अंतर्निहित मॉडल प्रकार से निपटने के लिए लागू किया जा सकता, व्यक्ति)।

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

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