2009-10-29 10 views
31

डब्ल्यूपीएफ से निपटने के दौरान हम एमवीसी या एमवीपी पर एमवीवीएम क्यों जाते हैं?क्यों एमवीवीएम और इसका मुख्य लाभ क्या है?

इसका उपयोग करके हमें क्या अतिरिक्त लाभ मिलता है?

संपादित करें:

ईमानदारी से कहूं तो आज मैं एक साक्षात्कार किया था और मैं इस सवाल का कहा गया है। मैंने INotifyPropertyChanged, ICommand, IValue कनवर्टर की तरह उत्तर दिया .. लेकिन वह संतुष्ट नहीं था। आज के बाद मैं इस सवाल का अग्रिम

+3

मैं हमेशा एमवीवी की विविधता के रूप में एमवीवीएम देखा। –

उत्तर

44

मैं आपको जेसन डॉलिंगर द्वारा विशेष रूप से उपयोगी video पर इंगित करूंगा।

किसी भी एमवीएक्स शैली पैटर्न को लागू करने से, किसी भी एमवीएक्स शैली पैटर्न को लागू करने से यह अधिक परेशानी की तरह लग रहा था, लेकिन कुछ वर्षों से WPF के साथ काम करने के बाद, मैं ईमानदारी से कह सकता हूं कि मैं कुछ भी कम नहीं मानूंगा। पूरे प्रतिमान को आउट ऑफ़ द बॉक्स का समर्थन किया जाता है।

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

दूसरा, जबकि आपके 'मॉडल' में आपके 'दृश्य' में आवश्यक सभी डेटा हो सकते हैं, तो आप उस डेटा को इस तरह से सारणीबद्ध करना चाहेंगे कि आपका 'मॉडल' समर्थन नहीं करता है। उदाहरण के लिए, कहें कि आपके मॉडल में डेट प्रॉपर्टी है। मॉडल में यह पूरी तरह से DateTime ऑब्जेक्ट के रूप में मौजूद हो सकता है लेकिन आपका दृश्य इसे पूरी तरह से अलग तरीके से प्रस्तुत करना चाहता है। 'व्यूमोडेल' के बिना आपको या तो उस मॉडल को देखने या संशोधित करने के लिए 'मॉडल' में संपत्ति को डुप्लिकेट करना होगा जो 'मॉडल' को गंभीरता से खराब कर सकता है।

आप अपने मॉडल के कुल हिस्सों को अलग-अलग कक्षाओं/पुस्तकालयों में मौजूद 'व्यूमोडेल' का भी उपयोग कर सकते हैं ताकि 'व्यू' के साथ निपटने के लिए अधिक धाराप्रवाह इंटरफ़ेस की सुविधा मिल सके। यह बहुत संभावना नहीं है कि आप अपने कोड में डेटा के साथ काम करना चाहेंगे उसी तरह से उपयोगकर्ता उस डेटा को प्रस्तुत करना चाहेगा या नहीं चाहेगा।

उस पर, आपको 'दृश्य' और 'व्यूमोडेल' के बीच स्वचालित दो-तरफा डेटा बाध्यकारी के लिए समर्थन मिलता है।

वास्तव में अतिरिक्त सामानों का एक पूरा समूह है जो मैं बैंग सकता हूं लेकिन जेसन का कहना है कि यह दूर बेहतर है कि मैं अपनी सलाह वीडियो देख सकता हूं। इस तरह काम करने के कुछ दिनों के बाद, आप आश्चर्यचकित होंगे कि इसके बिना आपको कभी कैसे मिला।

शुभकामनाएं।

+5

जेसन द्वारा वह वीडियो एमवीवीएम का सबसे अच्छा परिचय है जिसे मैंने कभी देखा/पढ़ा है। और स्रोत-कोड यहां पाया जा सकता है http://blog.lab49.com/archives/2689 –

3

बेक्ड ICommand और INotifyPropertyChanged के लिए समर्थन में में

धन्यवाद डाल दिया है दो सबसे बड़ी लाभ हैं। एमवीवीएम का उपयोग करना कमांड को वायरस करना और WPF UI में डेटा प्लग करना वाकई आसान बनाता है। चीजें बस काम करते हैं।

+0

ईमानदार होने के लिए, आज मेरे पास एक साक्षात्कार था और मुझे यह प्रश्न पूछा गया है। मैंने लगभग उसी चीज का भी जवाब दिया जैसे INotifyPropertyChanged, ICommand, IValue कनवर्टर .. लेकिन वह संतुष्ट नहीं था। अब से मैंने इस सवाल को रखा है। –

5

WPF किसी अन्य यूआई ढांचे, जो MVVM बिना

MVVM इकाई testability और उत्कृष्ट दृश्य-अज्ञेयवाद है, जो यह

15

उपयोग करने के लिए ये मेरा विशिष्ट हैं एक अच्छी बात करना प्रदान करता है अनियंत्रित हो जाएगा की तुलना में बेहतर डेटा बाइंडिंग है MVVM

  1. करने के लिए अपने विचारों के (अभिव्यक्ति मिश्रण का उपयोग करने के विचारों डिजाइन करने की क्षमता) बढ़ जाती है "Blendability"। यह उन टीमों पर जिम्मेदारियों को अलग करने में सक्षम बनाता है जो एक डिजाइनर और प्रोग्रामर के लिए भाग्यशाली हैं ... प्रत्येक दूसरे से स्वतंत्र काम कर सकता है।
  2. "लुकलेस" व्यू तर्क। दृश्य उन कोडों से अज्ञेयवादी हैं जो उनके पीछे चलते हैं, एक ही दृश्य तर्क को कई दृश्यों में पुन: उपयोग करने में सक्षम बनाता है या आसानी से पुनः लोड या प्रतिस्थापित किया जाता है। "व्यवहार" और "शैली" के बीच चिंताओं को अलग करता है।
  3. विचारों को अपडेट करने के लिए कोई डुप्लिकेट कोड। कोड-बैक में आपको "myLabel.Text = newValue" में बहुत सी कॉल दिखाई देगी। एमवीवीएम के साथ आपको आश्वस्त किया जा सकता है कि दृश्य अंतर्निहित संपत्ति को स्थापित करके उचित रूप से अपडेट किया गया है और इसके सभी दुष्प्रभावों को देखते हैं।
  4. टेस्टेबिलिटी। चूंकि आपका तर्क आपके दृश्य का पूरी तरह से अज्ञेयवादी है (कोई "myLabel.Text" संदर्भ नहीं), इकाई परीक्षण आसान बना दिया गया है। आप व्यूमोडेल के व्यवहार को बिना किसी दृश्य के परीक्षण का परीक्षण कर सकते हैं। इसने व्यू व्यवहार के परीक्षण-संचालित विकास को भी सक्षम किया, जो कोड-बैक का उपयोग करके लगभग असंभव है।

अन्य दो पैटर्न वास्तव में उन चिंताओं के संदर्भ में अलग हैं। आप एमवीवी और एमवीसी के साथ एमवीवीएम का उपयोग कर सकते हैं (इसमें से कुछ अच्छे नमूने बाहर हैं)।

वास्तव में, एमवीपी (एक पर्यवेक्षण नियंत्रक के बजाय एक निष्क्रिय दृश्य) वास्तव में मेरी राय में एमवीवीएम का एक रूप है।

+2

2 और 4 एमवीसी या एमवीपी के साथ-साथ एमवीवीएम के लिए भी सच हैं। –

+0

हाँ ... मैंने उन पैटर्नों को अनदेखा किया क्योंकि वे वास्तव में एक विशिष्ट अनुप्रयोग के थोड़ा अलग पहलू को संबोधित करते हैं। मैंने इसे शामिल करने के लिए अपना जवाब संपादित कर लिया है। –

+0

+1 अच्छा और आसान समझ –

0

डाटाबेस के लिए एक्सएएमएल कोड की क्षमता, साथ ही साथ ट्रिगर्स का अस्तित्व एमवीपी और एमवीसी पैटर्न को तोड़ देगा।

1

मैं व्यक्तिगत रूप से एमवीवीएम को लाभ के रूप में नहीं देखता हूं, लेकिन उन लोगों के लिए दायित्व के रूप में जो डब्ल्यूपीएफ कूल फीचर्स का उपयोग करना चाहते हैं।

मॉडल से यूआई को अलग करने के लिए, डब्ल्यूपीएफ कोर पर बाध्यकारी डेटा के साथ बहुत अधिक बनाया गया है। लेकिन जिस तरह से डेटा बाइंडिंग तकनीकी रूप से WPF में किया जाता है कुछ हद तक खास है, के रूप में यह की तरह वर्गों से जुड़ा हुआ है:

  • DependencyProperty
  • इस वजह से INotifyPropertyChanged
  • ObservableCollection

तुम सिर्फ नहीं कर सकते मानक .NET तकनीक का उपयोग करके आप वास्तव में एक मॉडल लिखना चाहते हैं। उदाहरण के लिए, डब्ल्यूपीएफ ट्री व्यू डेटा बाध्यकारी और टेम्पलेट्स का उपयोग करके w/o का उपयोग करना लगभग असंभव है। उदाहरण के लिए आप Winforms में एक सामान्य मॉडल से बस इसे पॉप्युलेट नहीं कर सकते हैं। यह एक नोड के बच्चों का प्रतिनिधित्व करने के लिए ObservableCollection का उपयोग कर एक पदानुक्रमित मॉडल के लिए बाध्य होना चाहिए।

तो मान लें कि वी एक्सएएमएल कोड का प्रतिनिधित्व करता है और यह कोड-पीछे समकक्ष है (इसलिए यह एक तकनीक के रूप में डब्ल्यूपीएफ से जुड़ा हुआ है), और मान लें कि एम आपके मॉडल का प्रतिनिधित्व करता है (इसलिए यह किसी भी तरह से डब्ल्यूपीएफ यूआई तकनीक से जुड़ा नहीं है)।

ठीक है, आप कभी नहीं यह केवल इन वी & एम

आप दोनों के बीच कुछ जोड़ना होगा साथ WPF के तहत ठीक से काम करना होगा। ऐसा कुछ जो WPF- संगत है और आपके मॉडल को समझता है। कुछ जो निर्भरताप्रदर्शन बोलता है, अवलोकन योग्य चयन और INotifyPropertyChanged। यही वही है जिसे वीएम कहा जाता है।

एक साइड नोट के रूप में, एमवीवीएम का एक विकल्प वी & एम (डब्ल्यू/ओ वीएम प्लंबिंग) संयोजन बनाने के लिए एम के साथ डब्ल्यूपीएफ-संगत है लेकिन अभी भी एक उचित यूआई स्वतंत्रता के साथ है। ऐतिहासिक रूप से, ObservableCollection WindowsBase.dll असेंबली में था (जिसे डब्ल्यूपीएफ के साथ भेज दिया गया था), इसलिए यह वास्तव में एक यूआई तकनीक से जुड़ी चीज़ के लिए एक सामान्य मॉडल को बांधने के लिए अजीब लग रहा था। इसे तब से System.dll पर ले जाया गया है। फिर भी, कभी-कभी एक शुद्ध वीएम मॉडल w/o को विशेष रूप से WPF के लिए एम tweaking रखने के लिए मुश्किल है ...

+0

हां आप जो कहते हैं उसके साथ सहमत हैं लेकिन डब्ल्यूपीएफ का डाटाबेसिंग कोड के साथ-साथ वीएम में बहुत अच्छा काम करता है। ओसी, आईएनपीसी और डीपी सभी एमवीवीएम के बिना महान काम करते हैं। डब्ल्यूपीएफ की सच्ची शक्ति डाटाबेसिंग में एमवीवीएम नहीं है। हम उत्कृष्ट डाटाबेसिंग दोनों के साथ एमवीवीएम और कोड दोनों के पीछे बनाते हैं। –

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