2010-02-17 18 views
9

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

उदाहरण के लिए मेरे पास कुछ पेंट-जैसा एप्लिकेशन है और मैं XAML में चित्रों को सहेजता हूं। व्यूमोडेल में क्या है मॉडल में क्या है?

क्या मॉडल आपूर्ति को चित्रों को एक एक्सएएमएल फ़ाइल से लोड/सहेजने के लिए काम करता है?

कि मॉडल उजागर (रंग, चौड़ाई, स्थिति आदि) गुणों के ViewModel बाँध करता है?

क्या मॉडल में या व्यूमोडेल में सत्यापन होता है?

उत्तर

2

ViewModel मॉडल है जो प्रस्तुति तकनीक का उपयोग कर रहे के लिए उपयुक्त है के प्रतिनिधित्व है।

अपने उदाहरण में मेरा मानना ​​है कि मॉडल लोड करने के लिए कार्य करता है प्रदान नहीं करेगी/एक XAML फाइल करने के लिए/से चित्रों को बचाने के। यह डेटा एक्सेस ऑब्जेक्ट/रिपोजिटरी में किया जाएगा जिसे व्यू मॉडेल द्वारा मॉडल उदाहरणों को इनपुट के रूप में लिया जाएगा। यह बिट अक्सर परिवर्तनीय होता है और यह निर्भर करता है कि आपके मॉडल वर्ग कैसा दिखते हैं।

व्यूमोडेल आमतौर पर डेटा बाइंडिंग का उपयोग नहीं करता है। यह बस मॉडल को दृश्य में दिखाता है जो प्रेजेंटेशन (व्यू) तकनीक के लिए सहायक है। डब्ल्यूपीएफ/सिल्वरलाइट के मामले में मूल रूप से इसका मतलब है कि यह INotifyPropertyChanged इंटरफ़ेस लागू करता है।

मान्यता आमतौर पर देखें (काफी सब कुछ की तरह), ViewModel में प्रदर्शन किया है, लेकिन अक्सर मॉडल के लिए ViewModel द्वारा प्रत्यायोजित द्वारा शुरू किया गया है। निस्संदेह यह है कि अपने आवेदन के दौरान अपनी मान्यताओं को दोहराना न भूलें। सामान्य मान्यताओं के लिए सबसे अच्छी जगह मॉडल है (IDataErrorInfo देखें)। हालांकि आपके व्यूमोडेल के लिए विशिष्ट सत्यापन सीधे व्यूमोडेल में संभाले जा सकते हैं।

+0

मैं चर्चा ViewModel करने के लिए मॉडल में हो रहा परिवर्तन डेटा को उजागर तो वे बाध्य और बाध्यकारी सामान्य डेटा के माध्यम से देखें अद्यतन किया जा सकता के बारे में न्यायसंगत लगता है। आपको डेटा स्तर के बारे में सोच रहे हैं, तो यह डेटा को बनाए रखने डेटा है कि करने की प्रक्रिया में खींच लिया की स्थिति पर मैट्रिक्स के लिए होता है (एक ऑफ़लाइन डेटा संग्रह के बारे में सोच, विशेष रूप से)। वे मीट्रिक मॉडल परत में मौजूद हैं और परिवर्तन करते हैं, तो कैसे आप परिवर्तन सूचना मॉडल से ViewModel करने के लिए डेटा बाइंडिंग के लिए देखें करने के लिए धक्का होगा? – ScottCher

0

एक ओर से, व्यूमोडेल मॉडल ऑब्जेक्ट के लिए एक रैपर हो सकता है और प्रेजेंटेशन विवरण के साथ इसे बढ़ा सकता है। उदाहरण के लिए, यदि आपके पास मॉडल ऑब्जेक्ट - पेन है, तो PenViewModel में IsSelected, IsDragging गुण आदि शामिल हो सकते हैं। यह व्यूमोडेल रैपर के रूप में है।

दूसरी तरफ से, ViewModel दृश्य पर एक अमूर्त जो विशेष रूप से नियंत्रण के संदर्भ में शामिल नहीं है हो सकता है। यह मत भूलना कि एमवीवीएम का उद्देश्य इकाई परीक्षण है। तो उदाहरण के लिए, आपके चित्रकला अनुप्रयोग में आपके पास खींचने योग्य बार हैं। तो आप व्यूमोडल्स के सेट के साथ इस फीचर को सार कर सकते हैं: BarViewModel {IsSnapped, Position, IsEnabled}, BrushBarViewModel: BarViewModel, PenBarViewModel इत्यादि। और फिर आप इस सुविधा को यूनिट परीक्षणों के साथ कवर कर सकते हैं, लेकिन इन सभी चीजों का मॉडल से कोई संबंध नहीं है। यह व्यूमोडेल देखें अबास्ट्रक्शन के रूप में।

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

देखें syncronizes राज्य।इस पर

अड्डों, अपने प्रश्नों के जवाब देने वाला हो जाता है:

लोड/एक XAML फाइल करने के लिए/से चित्रों को बचाने के लिए मॉडल की आपूर्ति कार्यों करता है?

नहीं। मॉडल के पास किसी भी XAML फ़ाइलों का प्रत्यक्ष संदर्भ नहीं है।

कि मॉडल उजागर (रंग, चौड़ाई, स्थिति आदि) गुणों के ViewModel बाँध करता है?

सं। बाध्यकारी दृश्य सिंक्रनाइज़ेशन का तंत्र है। तो आपको उन गुणों को देखने के लिए बाध्य करने की जरूरत है। आप सीधे मॉडल, या ViewModel wrapper पर सीधे बाध्य कर सकते हैं।

क्या मॉडल में या व्यूमोडेल में सत्यापन होता है?

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

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