मैंने एमवीवीएम पर एमएसडीएन लेख पढ़ा है और मैं वास्तव में आश्वस्त नहीं हूं। यदि मॉडल पहले से ही लागू करता है IotifyPropertyChanged/INotifyCollectionChanged, मॉडल के खिलाफ सीधे बाध्यकारी दृश्य में क्या गलत है? ऐसा लगता है कि अतिरिक्त मॉडल व्यू बिना किसी लाभ के कुछ कोड पेश करता है। क्या मुझे कुछ याद आ रही है?क्या एमवीवीएम वास्तव में उपयोगी है?
उत्तर
मैं भी थोड़ा सा संदेह था एमवीवीएम जब तक मैंने जेसन डॉलिंगर द्वारा यह great presentation देखा। मैं अपने सभी सहकर्मियों को सलाह देता हूं जो इसे देखने के लिए डब्ल्यूपीएफ और एमवीवीएम में शुरू कर रहे हैं।
जेसन एक आवेदन है कि एक एक "पारंपरिक" तरह से लिखते थे, में घटना संचालकों द्वारा नियंत्रित बटन क्लिक के साथ के साथ शुरू किया कोड-पीछे यूआई की कि फिर अपडेट की गई अन्य भागों। डब्ल्यूपीएफ डेटा-बाध्यकारी, कमांड, और यूनिटी का उपयोग करके, उन्होंने इसे टुकड़ा के टुकड़े में बदल दिया, encapsulated, पठनीय और टेस्टेबल एम-वी-वीएम डिज़ाइन। बहुत बढ़िया था।
अधिक सीधे आपके सवाल का जवाब करने के लिए, भले ही वह एक ViewModel करने के लिए बाध्य करने के लिए जब अपने मॉडल पहले से ही सब कुछ है मूर्खतापूर्ण लगता है, तो आप अक्सर मॉडल है कि केवल दृश्य द्वारा आवश्यक है करने के लिए एक छोटी सी समायोजन की आवश्यकता होगी, हवा हूँ। समय के साथ, ये छोटे बदलाव आपके मॉडल में रेंगेंगे, जहां वे संबंधित नहीं हैं। यह आपके मॉडल को जितना होना चाहिए उससे ज्यादा जटिल बना देगा।
जब मैं मॉडल करता हूं तो "मैं यह सब करता हूं", मैं एक व्यूमोडेल जोड़ता हूं जिसमें एक संपत्ति, मॉडल शामिल होता है। फिर मेरे बाइंडिंग में मैं बस मॉडल से बांधता हूं। मॉडल, मॉडल। एज, आदि। यह वास्तव में कोई प्रयास नहीं है। बाद में, अगर मुझे केवल दृश्य के लिए tweaks की आवश्यकता है, तो मेरे पास पहले से ही मेरा व्यूमोडेल क्लास तैयार है। यह आपके कोड को और अधिक सहज और समझने में आसान बनाता है। आपको आश्चर्य नहीं होगा, क्या मैंने इस मामले में मॉडल या व्यूमोडेल से बंधे थे? यह हमेशा ViewModel होगा।
INotifyPropertyChanged
और INotifyCollectionChanged
विचार करने वाले एकमात्र पहलू नहीं हैं ... कई मामलों में, मॉडल द्वारा खुलासा डेटा आसानी से उपयोग योग्य नहीं होगा। व्यूमोडेल की भूमिका मॉडल और दृश्य के बीच एक एडाप्टर के रूप में कार्य करना है: डेटा को उस रूप में बेनकाब करें जो दृश्य को आसानी से बांधने की अनुमति देता है, कार्यों को निष्पादित करने के लिए दृश्यों को बेनकाब कर सकता है ... आम तौर पर, एक मॉडल ICommand
एस का पर्दाफाश नहीं करेगा: यदि ऐसा होता है, तो मॉडल WPF- विशिष्ट है, जो कभी भी अच्छी बात नहीं है कि आप किसी अन्य गैर-WPF अनुप्रयोग में पुन: उपयोग करना चाहते हैं ...
मेरे पास है कुछ महीनों के लिए एमवीवीएम का उपयोग कर रहा है, और इसने मेरे जीवन को बहुत आसान बना दिया: कोड-बैक फाइलों में "स्पेगेटी कोड", ज़िम्मेदारियों को अलग करने, स्वच्छ समग्र वास्तुकला को साफ़ करने के लिए ...
2 परियोजनाओं के लिए MVVM कुछ चीजें है कि मैं ViewModel में कर रहे हैं उपयोग किया गया है और यहाँ कर रहे हैं:
- (मॉडल से डेटा को बदलने जब आप एक ViewModel का उपयोग कर रहे हैं, यह जीवन में आता है आसान जब यूआई विनिर्देशों बदलने के लिए, आप मॉडल को बदलने की जरूरत नहीं है/हठ कोड)
- मॉडल
- कार्यान्वयन आदेश
- कैशिंग द्वारा प्रदान की एक संग्रह पर एक ICollectionView का कार्यान्वयन (डेटा की गणना करने के लिए महंगे बनाए रखने)
- मॉडल डेटा पर एक शब्दकोश (तेजी से देखने के लिए)
- लेज़ी लोडिंग (जब तक यह देखें द्वारा इस्तेमाल किया गया है लोड नहीं)
- प्रबंध पूर्ववत करें/फिर
- डेटा की मान्यता (IDataErrorInfo)
और वहाँ करने के लिए बहुत कुछ है (जो मैं भूल गया) जो मॉडल में स्वयं फिट नहीं होगा, या यूजर इंटरफेस स्पेगेटी बना देगा।
भूलना नहीं है, ViewModel आपको उन चीजों का परीक्षण करने में सक्षम बनाता है जिन्हें आप परीक्षण करने में सक्षम नहीं होंगे अगर यह यूआई (जैसे कमांड) में लागू किया गया था।
अंत में, एमवीवीएम का उपयोग करके, मैं व्यूमोडल्स का उपयोग करके अपने एप्लिकेशन का एक कमांड लाइन संस्करण बनाने में सक्षम था।
मैं कुछ वर्षों से एमईएफ के साथ एमवीवीएम का उपयोग कर रहा हूं और वास्तव में यह सुनिश्चित नहीं करता कि यह वास्तव में कितना उपयोगी है। हमारे विकास में हम अलग-अलग दृश्यों के लिए व्यूमोडल्स का पुन: उपयोग नहीं करते हैं, न ही हमारे पास ऐसे डिज़ाइनर हैं जिन्हें केवल दृश्य (UI) को बदलने की अनुमति है।
और व्यूमोडेल में कई चीजों को हासिल करना मुश्किल है, जैसे व्यूमोडेल में परिवर्तनों के आधार पर कर्सर फोकस सेट करना (हाँ, यह संभव है, लेकिन कोड में बहुत अधिक अव्यवस्था जोड़ता है)।
एमवीवीएम के बारे में अच्छी बात यह है कि फ़ील्ड को सीधे सेट करने के बजाए बाध्यकारी के रूप में मूल्यों और आज्ञाओं का आयोजन किया जा रहा है, लेकिन यह व्यूमोडेल के बिना किया जा सकता है।
- 1. -Wextra वास्तव में कितना उपयोगी है?
- 2. ओआरएम (लिंक, हाइबरनेट ...) वास्तव में उपयोगी है?
- 3. क्या रेल की सुरक्षा_from_forgery वास्तव में उपयोगी है?
- 4. क्या नामस्थान वास्तव में ढांचे में उपयोगी हैं?
- 5. वास्तव में उपयोगी वीबी 6 स्रोत कोड
- 6. सत्यापन पैरामीटर वास्तव में उपयोगी हैं?
- 7. एएनएसआई सी यूनियन - क्या वे वास्तव में उपयोगी हैं?
- 8. क्या मुद्रा स्वरूपण कार्य वास्तव में उपयोगी हैं?
- 9. नोएसक्यूएल वास्तव में क्या है?
- 10. एमवीवीएम स्पष्टीकरण: व्यूमोडेल में क्या है, मॉडल में क्या है?
- 11. स्रोत फ़िल्टर वास्तव में क्या है?
- 12. वर्तमानडिज़ाइन.writeCssincludes में वास्तव में क्या शामिल है?
- 13. एमवीवीएम
- 14. रेक वास्तव में क्या है?
- 15. # वास्तव में क्या शामिल है?
- 16. वास्तव में PLINQ क्या है?
- 17. वास्तव में @ चयनकर्ता क्या है?
- 18. रॉम वास्तव में क्या है?
- 19. वास्तव में $ RPM_BUILD_ROOT क्या है?
- 20. sun.jnu.encoding वास्तव में क्या है?
- 21. हैश वास्तव में क्या है?
- 22. JSON वास्तव में क्या है?
- 23. डब्ल्यूपीएफ वास्तव में क्या है?
- 24. मेटाप्रोग्रामिंग वास्तव में क्या है?
- 25. क्या जागरूक वास्तव में है?
- 26. LINQ वास्तव में क्या है?
- 27. जावा वास्तव में क्या है?
- 28. InetAddress.isSiteLocalAddress() वास्तव में क्या मतलब है?
- 29. क्या एडॉर्नर एमवीवीएम तोड़ता है?
- 30. @ उपयोगी कब होता है?
जब मैंने एमवीवीएम के साथ शुरुआत की तो मैं भी संदेहजनक था तब मैंने उस वीडियो को देखा और अब यह मेरे डब्ल्यूपीएफ ऐप्स के साथ एमवीवीएम के कुछ रूपों का उपयोग नहीं कर रहा है। जोश स्मिथ द्वारा क्रैक.नेट के स्रोत को पढ़ने में भी बहुत मदद मिली। –
वह लिंक अब मौजूद नहीं है। –