2011-06-01 16 views
5

बटन में WPF कमांड और अपवाद CommandViewModel में बाध्यकारी है (यह ViewModel में Save विधि चलाता है)। विधि Save विफल हो सकती है और अपवाद फेंक सकती है।व्यूमोडेल

उन अपवादों को पकड़ने का सर्वोत्तम अभ्यास क्या है? MessageBox दिखाने के लिए पर्याप्त होगा लेकिन मैं इसे ViewModel में नहीं करना चाहता (यह सही तरीका नहीं है)।

उत्तर

6

1 - मुझे विश्वास नहीं है कि यह "सही तरीका नहीं है"।

ViewModel में Exception उठाए गए ViewModel तर्क का हिस्सा आमतौर पर होता है। इसलिए, MessageBox दिखाकर "खराब रास्ता" नहीं होगा। ध्यान रखें कि एमवीवीएम का वास्तविक उद्देश्य सभी कोड-पीछे को खत्म करने के लिए नहीं है, लेकिन वास्तव में यूआई-तर्क और व्यापार-तर्क को स्पष्ट रूप से अलग करना है। व्यावसायिक ऑब्जेक्ट्स से निपटने के दौरान एक अपवाद होगा - आप इसे ViewModel

2 - वैसे भी अगर आप इस दृष्टिकोण से चिपकना चाहते हैं (मैं इसे चरमपंथी एमवीवीएम के रूप में अर्हता प्राप्त करूंगा - हे - - आप यह कर सकते हैं:

  • एक सत्यापनकर्ता का उपयोग करें में प्रवेश नहीं बनाएगा एक Exception
  • एक विशिष्ट वापसी मान परिभाषित एक Exception होता है अगर, यानी डेटा सुनिश्चित करने के लिए (आप Binding.ValidationRules के बारे में सुना?, नहीं करता है, तो this article should be useful for you है)। कोशिश करें, और यदि आप कभी भी पकड़ने में प्रवेश करते हैं, तो आप एक विशिष्ट त्रुटि मान वापस कर देंगे जिसका यूआई द्वारा एक त्रुटि के रूप में व्यवहार किया जाएगा (उदाहरण के लिए यदि आप इस विशिष्ट त्रुटि मान को लाल रंग में रंगने के लिए Trigger का उपयोग कर सकते हैं फिर से लौटा दिया गया है)

वैसे भी मुझे लगता है कि जो सभी संभव कोड-पीछे को नष्ट करने और शुरू करने के लिए जटिल पैटर्न (उदाहरण के लिए संलग्न व्यवहार से एक "अतिवादी MVVM" लागू करना चाहते हैं बहुत से लोगों को देखते हैं कि ...) सिर्फ एक आवश्यकता का पालन करने के लिए जो वास्तव में मेरी राय में बकवास है। मैं नहीं कहूंगा कि मैं बिल्कुल सही हूं, लेकिन मैं एक पैटर्न के रूप में एमवीवीएम देखना पसंद करता हूं जो एक पैटर्न की तुलना में कोडिंग के मेरे तरीके को सरल बना देगा जो मुझे बुनियादी चीजों के लिए इतना दर्द पेश करेगा (उदाहरण के लिए मैंने लोगों को अटैचमेंटबैविर्स लागू करने को देखा है एक साधारण डबलक्लिक एक्शन के लिए। मैं व्यक्तिगत रूप से एक डबल इवेंट को फायरिंग करता हूं जब डबलक्लिक घटना को निकाल दिया जाता है। डबलक्लिक इवेंट को निकाल दिया जाता है। 100-लाइन क्लास + एक्सएएमएल कोड के खिलाफ कोड की 1 लाइन दूसरी तरफ के लिए, अपना पक्ष चुनें। मेरा मानना ​​है कि एक साधारण समस्या का एक सरल समाधान होना चाहिए)

चीयर्स!

+1

संदेश बॉक्स दिखाए जाने पर आप स्वचालित रूप से अपने 'व्यू मॉडेल' का परीक्षण कैसे कर सकते हैं? – Maxence

6

आपको लगता है कि यह संदेशबॉक्स दिखाने का सही तरीका क्यों नहीं है? व्यूमोडेल के लिए यूनिट टेस्ट का कारण? यदि आपकी समस्या है तो बस एक IMessageBoxService लिखें जिसे आप अपने वीएम में उपयोग करते हैं।

यह post दिखाता है कि एक संवाद सेवा कैसे बनाएं। इसलिए आपको इच्छित संदेशबॉक्स सेवा प्राप्त करने के लिए इसे थोड़ा सा सुधारना होगा।

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