2010-08-16 15 views
8

की उत्तरदायित्व मैं एक उपकरण बना रहा हूं जिसका लक्ष्य कुछ पैरामीटर के आधार पर फ़ाइल डाउनलोड करना है।एक ViewModel

पहला चरण उन पैरामीटर को सेट (या पुनर्प्राप्त) करना है।

विभिन्न मापदंडों सेट प्राप्त किए गए हैं एक FileDownloadsManager द्वारा (के विन्यास फाइल के माध्यम से मान लीजिए): यह वास्तव में जो आदेश सही फ़ाइल को डाउनलोड करने में उपयोग करने के लिए मानकों को जानता है।

उन पैरामीटर को कक्षा में संग्रहीत किया जाता है, और मेरे पास इस कक्षा के उदाहरणों की एक सूची है।

इसका मतलब है कि मैं अपनी फ़ाइल को कई संभावित पैरामीटर सेट के साथ डाउनलोड कर सकता हूं।

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

अब, जब मैं अपने पैरामीटर सेट का चयन करता हूं, तो मैं संबंधित फ़ाइल को डाउनलोड करना चाहता हूं।

यह किसकी जिम्मेदारी होनी चाहिए?

मैं इस लग रहा है कि अगर ViewModel भी सक्रिय, एक विधि है कि डाउनलोड की गई फ़ाइल रिटर्न होने से है, इस MVVM पैटर्न के खिलाफ हो जाएगा; इसमें आपको क्या फायदा होगा ?

बोनस: डाउनलोड BackgroundWorkers या WebClient के अतुल्यकालिक तरीकों के साथ पृष्ठभूमि में संभव होना चाहिए।

उत्तर

19

मुझे ऐसा लगता है कि हर कोई मानता है कि MVVM कोई नियंत्रक के रूप में वे बाहर छोड़ दिया सी MVVM वास्तव में MVC "कि सिर्फ ViewModels कहते हैं," का एक परिवर्तन है।

शायद इसे इसके बजाय एमवीसीवीएम कहा जाना चाहिए था?

व्यूमोडेल केवल दृश्य से "जीयूआई" कोड को ऑफ़लोड करने और बाध्यकारी के लिए कोई डेटा रखने के लिए हैं। ViewModels किसी भी प्रसंस्करण नहीं करना चाहिए। एक अच्छा परीक्षण यह है कि आपका व्यूमोडेल स्वचालित यूनिट परीक्षणों के माध्यम से परीक्षण योग्य है और डेटा स्रोतों पर कोई निर्भरता नहीं है। उन्हें यह नहीं पता होना चाहिए कि डेटा वास्तव में कहां से आ रहा है (या इसे प्रदर्शित कौन कर रहा है)।

हालांकि यह अनदेखी की जा सकती है/परहेज, एक नियंत्रक निर्णय लेने से प्रदर्शित करने के लिए कौन-सा डेटा मॉडल के लिए और जो विचारों में जिम्मेदार है। व्यूमोडेल मॉडल (एमवीवीएम में एम) और दृश्यों के बीच एक पुल है। यह सरल "अलग" XAML संलेखन की अनुमति देता है।

आपके प्रश्न के उत्तर में प्रसंस्करण को नियंत्रक द्वारा संभाला जाना चाहिए। यदि इसे व्यस्त संकेतक आदि दिखाने के लिए व्यूमोडेल को अपडेट करने की आवश्यकता है, तो यह ठीक है, लेकिन यह व्यू या मॉडल या व्यूमोडेल की ज़िम्मेदारी नहीं है।

+1

विशेष रूप से "एमवीसीवीएम" पर प्रतिबिंब के लिए आपकी अंतर्दृष्टि के लिए धन्यवाद: यह निश्चित रूप से कुछ कहने योग्य है: नियंत्रक अभी भी जिंदा हैं! –

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