2009-04-01 12 views
10

मुझे एमवीवीएम पैटर्न पसंद है, एक बार जब आप इसका उपयोग करना शुरू कर देते हैं, तो आप इसका आदी हो जाते हैं।डब्ल्यूपीएफ एमवीवीएम कमांड बनाम इवेंट हैंडलर का उपयोग

मुझे पता है कि सही दुनिया में आपका व्यू कोड-पीछे लगभग खाली है (शायद कन्स्ट्रक्टर में कुछ कोड) और दृश्य के हर पहलू को व्यूमोडेल से छेड़छाड़ की जा रही है।

लेकिन ऐसे समय होते हैं जब व्यूमोडेल में नए फ़ील्ड, गुण, कमांड बनाने से ईवेंट हैंडलर में एक ही चीज़ को लागू करने से अधिक कोड बनाता है।

फिलहाल मैं निम्नलिखित नियम का पालन:

ईवेंट हैंडलर कोड बहुत छोटा सा हिस्सा manipulates हैं की यह दृश्य है (उदाहरण के बटन पर क्लिक ईवेंट हैंडलर के लिए कुछ खास TextBlock कि एक ही दृश्य पर स्थित है के फ़ॉन्ट बढ़ जाती है) तो यह ठीक है ईवेंट हैंडलर के अंदर तर्क लागू करें। लेकिन यदि व्यू को व्यावसायिक तर्क में हेरफेर करने या देखने के संसाधनों को एक्सेस करने की आवश्यकता है, तो मैं इन जिम्मेदारियों को ViewModel को असाइन करता हूं।

मेरे दृष्टिकोण के बारे में आप क्या सोचते हैं?

ईवेंट हैंडलर और व्यूमोडेल का उपयोग करते समय आप टालने का प्रयास कैसे करते हैं?

एमवीवीएम पैटर्न का उपयोग करते समय आप किस सर्वोत्तम अभ्यास की सिफारिश कर सकते हैं?

उत्तर

14

मैं कहूंगा कि अंगूठे का आपका नियम बुरा नहीं है।

मेरे विचार में, मुख्य चिंता यह है कि "कोड दृश्य-विशिष्ट है, या क्या यह व्यावसायिक तर्क को संबोधित करता है?"।

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

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

2

मैं मैं भी पिछली टिप्पणी पर बात जोड़ सकते हैं लगता है,

, ईवेंट हैंडलर्स का उपयोग कर बहुत मामूली अनुभव से करने के बजाय

, आदेश मुझे इस अर्थ में कि यह करने के लिए प्रतिक्रिया करने के लिए एक स्वतंत्र तंत्र प्रदान करता है में और अधिक लचीलापन देने के कमांड की स्थिति की जांच करने की क्षमता के साथ विभिन्न नियंत्रणों से घटनाओं/कार्यों।

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