2010-11-10 15 views
6

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

तो मेरा सवाल यह है कि क्या व्यूमोडेल मॉडल को दृश्य से हटा सकता है? दूसरे शब्दों में, क्या यह ViewModel के माध्यम से व्यू में EntityFramework इकाइयों को बेनकाब करने के लिए "ठीक" है? उदाहरण के लिए, कहें कि दृश्य में एक combobox है जहां उपयोगकर्ता एक पते के लिए एक राज्य चुन सकते हैं। पताViewModel में, राज्य को वास्तविक इकाई-प्रकार की संपत्ति के रूप में उजागर किया जाना चाहिए, या इसे राज्य दृश्य मॉडल के रूप में उजागर किया जाना चाहिए? यदि यह एक राज्यदृश्य मॉडल-टाइप की गई संपत्ति होनी चाहिए, तो मुझे समझ में नहीं आ रहा है कि अंतर्निहित मॉडल को पताViewModel.State Setter के भीतर कैसे प्रबंधित किया जाना चाहिए (क्योंकि संपत्ति में जो सेट किया जा रहा है वह एक राज्य दृश्य मॉडल है और राज्य इकाई नहीं है)।

ऐसा लगता है कि यह किसी भी तरह से जा सकता है, लेकिन मॉडल को सीधे देखने के लिए कभी भी अधिक संगत नहीं लगता है। विचार?

उत्तर

2

दृश्य मॉडल का उद्देश्य डेटा मॉडल से दृश्य को कम करना है। यदि डेटा मॉडल के साथ दृश्य में कोई कार्यक्षमता नहीं है, तो कोई दृश्य मॉडल आवश्यक नहीं है।

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

आपके उदाहरण में, आप शायद StateViewModel कक्षा बनाये बिना दूर हो सकते हैं, क्योंकि इस तरह की कक्षा वास्तव में कुछ भी नहीं करेगी।

+0

यह सिद्धांत में सच है, लेकिन व्यवहार में कभी-कभी चीजें स्थिर नहीं होती हैं क्योंकि लोग (उनके बीच डेवलपर्स) सोचना चाहते हैं, उदाहरण के लिए राज्यों की सूची भविष्य में अन्य देशों, आदि शामिल करने के लिए विस्तारित की जा सकती है। .. –

+1

यह परिवर्तन नहीं है जो इस निर्णय पर असर डालेगा। सूची में नए राज्य जोड़ने से आवश्यकता नहीं होती है कि इसकी गुण यूआई में संपादन योग्य हो। –

4

आपको अपने मॉडल को पूरी तरह से अपने मॉडल से कम करने का प्रयास करना चाहिए, यह एक लक्ष्य होना चाहिए, आप इसे पूरा कर सकते हैं, या आप शायद नहीं, लेकिन फिर भी यह आपका लक्ष्य होना चाहिए।

विशेष रूप से आपका प्रश्न स्थिरांक (अधिक या कम) की सूची से संबंधित है, जो एक आसान मामला है। अगर मैं यहां गलत हूं तो मुझे सही करें, लेकिन आपके पास States तालिका code और प्रत्येक राज्य के लिए name है, और उसके बाद आपके पास एक विदेशी कुंजी के साथ एक और तालिका है।

इस परिदृश्य में यह सबसे अच्छा है आवेदन भर बजाय लोड करने के लिए और एक बार आवेदन प्रारंभ दौरान StateViewModel सूची बनाते हैं, और उसके बाद विदेशी कुंजी मान के साथ सौदा (राज्य code क्योंकि यह थे) StateViewModel खुद को वस्तुओं की है। गुण का उपयोग करना चाहिए SelectedValue और ComboBox, उदाहरण के SelectedValuePath हैं:

<ComboBox ItemsSource="{x:Static StateViewModel.StaticList}" 
      SelectedValue="{Binding StateForeignKey}" 
      SelectedValuePath="code" 
      DisplayMemberPath="name" /> 

यह ComboBoxStateViewModel के साथ वस्तुओं (जो एक अब निपटाए संदर्भ का उपयोग कर बनाया गया था) से स्थापित हो जाएगा, लेकिन पारित करेंगे चयनित आइटम के code बाध्य क्षेत्र StateForeignKey पर संपत्ति, इसके अतिरिक्त, ComboBoxname संपत्ति प्रदर्शित करेगा ताकि यह मानव-पठनीय हो।

0

कारण आप ViewModel में इकाई का खुलासा नहीं कर सकते हैं क्योंकि आप को देखने के साथ इकाई अपवित्र नहीं करना चाहिए विशिष्ट कोड ऐसे IDataErrorInfo, INotifyPropertyChanged, IEditableObject आदि के रूप में

इकाई आवेदन मूल है और POCO होना चाहिए, हर प्रकार के आवेदन में पुन: उपयोग किया जा सकता है। उदाहरण के लिए यदि आप मोबाइल, वेब और डेस्कटॉप के माध्यम से सुलभ एप्लिकेशन विकसित करते हैं तो आपको प्रत्येक प्रकार के एप्लिकेशन के लिए इकाई बनाने की आवश्यकता नहीं है।

decoupling कारण? क्षमा करें, लेकिन मैं सहमत नहीं हूं, क्योंकि मुझे डीक्यूपल मॉडल और व्यू मॉडेल द्वारा कोई लाभकारी नहीं दिख रहा है क्योंकि यूनिट टेस्ट व्यूमोडेल के अंदर इकाई के साथ या बिना ठीक काम करेगा।

अद्यतन

माफ करना, मैं भूल गया कि आप EF4 इस्तेमाल किया। ईएफ 4 इकाई समर्थन है IotifyProperty डिफ़ॉल्ट रूप से बदल दिया गया है इसलिए यह ViewModel पर आपकी इकाई का पर्दाफाश करने के लिए स्वीकार्य होगा।

1

मैं व्यूमोडेल के माध्यम से सीधे मेरे दृश्य में इकाई को बांधता हूं जब तक कि मुझे वृक्षदृश्य के लिए विशिष्ट गुणों जैसे इएसइलेक्टेड इत्यादि को जोड़ना न पड़े। अगर मुझे अतिरिक्त गुण जोड़ना है तो मेरे पास व्यूमोडेल प्रत्येक इकाई संपत्ति को लपेटता है।

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