2010-03-15 20 views
7

मैं एक WPF अनुप्रयोग पर काम कर रहा हूं, और मैं इसे एमवीवीएम पैटर्न का उपयोग करके संरचित कर रहा हूं। शुरू में मुझे एक विचार था कि व्यूमोडल्स को पुन: प्रयोज्य किया जाना चाहिए, लेकिन अब मुझे अब भी यकीन नहीं है।ViewModel कक्षाओं को कैसे पुन: प्रयोज्य होना चाहिए?

  • यदि मुझे WinForms एप्लिकेशन के लिए समान कार्यक्षमता की आवश्यकता है तो क्या मुझे अपने व्यू मॉड्यूल का पुन: उपयोग करने में सक्षम होना चाहिए?
  • सिल्वरलाइट सभी चीजों का समर्थन नहीं करता है डब्ल्यूपीएफ करता है - क्या मुझे सिल्वरलाइट अनुप्रयोगों का पुन: उपयोग करने में सक्षम होना चाहिए?
  • यदि मैं अपने आवेदन के लिए लिनक्स जीयूआई बनाना चाहता हूं तो क्या होगा। तो मुझे मोनो में निर्माण करने के लिए व्यूमोडेल की ज़रूरत है - क्या यह कुछ है जिसके लिए मुझे प्रयास करना चाहिए?
  • और इसी तरह ..

तो; क्या एक व्यक्ति को एक विशिष्ट दृश्य के साथ ViewModel कक्षाएं लिखनी चाहिए, या पुन: प्रयोज्यता के बारे में सोचना चाहिए?

+0

यह एक पुराना सवाल है, लेकिन [एमएसडीएन का जवाब] (https://msdn.microsoft.com/en-us/library/hh563947 (v = vs.110) .aspx) बहुत स्पष्ट है (और इसके विपरीत नीचे पोस्ट किए गए सभी उत्तरों के लिए): व्यूमोडेल को विशेष रूप से विभिन्न ओएस में कई विचारों द्वारा साझा किया जाना है। अन्यथा करना अनिवार्य रूप से अनावश्यक कोड का कारण बन जाएगा। – kmote

उत्तर

12

आपके प्रश्न का उत्तर करने के लिए, एकल जिम्मेदारी सिद्धांत के बारे में सोचते हैं: "। एक वर्ग एक, और केवल एक, बदलने के लिए कारण होना चाहिए"

मैं कहूंगा, कारण में, आप आमतौर पर एकाधिक विचारों के लिए व्यूमोडेल का पुन: उपयोग नहीं करना चाहते हैं। मुख्य कारण यह है कि मैं इसके लिए तर्क दूंगा, क्योंकि यह आपके व्यूमोडेल को बदलने के एक से अधिक कारण देगा। दूसरे शब्दों में, अगर कोई या दूसरा दृश्य बदलता है, तो उसे बदलने की आवश्यकता होगी, और मेरी राय में, बदलने के दो कारण हैं। यह कहां रुकता है? मैं इस मामले में इसे सरल रखूंगा, और दृश्य में एक व्यूमोडल को बांध दूंगा।

WPF के साथ एमवीवीएम के बारे में सोचने की एक और बात डेटा टेम्पलेटिंग है। यदि प्रत्येक व्यूमोडेल एक और केवल एक दृश्य को पूरा करता है तो इसे पूरा करना बहुत आसान है।

+0

मैं पूरी तरह से सहमत हूं। और यह एक उत्कृष्ट तर्क है! – stiank81

3

बस सामान्य रूप से, YAGNI प्रिंसिपल लागू करें - आपको शायद इसकी आवश्यकता नहीं होगी। जब तक आप इन चीजों को संभावित रूप से नहीं देख पा रहे हैं, तो मैं आपके सॉफ़्टवेयर को वर्तमान में आवश्यक आवश्यकताओं के लिए काम करने के लिए सबसे सरल दृष्टिकोण रखूंगा।

+0

अच्छा बिंदु! :-) – stiank81

2

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

विभिन्न यूआई प्रौद्योगिकियों में दृश्य मॉडल की पुनः उपयोगिता वास्तव में एमवीवीएम का लक्ष्य नहीं है। यदि आप इसे आजमाते हैं तो संभवतः दृश्य मॉडल को पुन: प्रयोज्य रखने के लिए आपको फिर से दृश्य में यूआई तकनीक के लिए कोड को स्थानांतरित करने का लुत्फ उठाया जाएगा। यह टेस्टेबिलिटी के मुख्य लक्ष्य के खिलाफ होगा।

यदि आपको वास्तव में अलग-अलग यूआई तकनीकों का समर्थन करने की आवश्यकता है, तो आप अभी भी दृश्य मॉडल के सामान्य तर्क को साझा "प्रेजेंटेशन" परत में कारगर बना सकते हैं। मैं यह सुनिश्चित नहीं करता कि यह जरूरी है कि यह आवश्यक है।

0

यह एक पुराना सवाल है, इसलिए मैं एक और जवाब जोड़ने में संकोच करता हूं। लेकिन अब तक पोस्ट किए गए सभी उत्तरों ने इस बिंदु को याद किया है।The answer from MSDN बहुत स्पष्ट है: ViewModel बहुत विशेष रूप से यह आंकड़ा में प्रदर्शन के रूप में विभिन्न OS के भर में कई बार देखा गया द्वारा साझा किया जा करने का इरादा है,:

enter image description here

अन्यथा करने से अनिवार्य रूप से अनावश्यक कोड उत्पन्न करेगी।

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