MVVM या MVC? WPF और ASP.NET के लिए कक्षाओं के एक ही सेट का उपयोग करना चाहते हैं


11

मैं डिज़ाइन पैटर्न के मामले में नौसिखिया हूँ। मैंने अभी एमवीसी सीखना शुरू किया है जब मैं एक नई चर्चा सुन रहा हूं, एमवीवीएम।

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

मैंने कुछ लेख पढ़े, लेकिन मैं वहां चर्चा की गई वास्तुकला की उच्च स्तरीय अवधारणाओं और .NET 3.5 और 4 का पालन नहीं कर रहा हूं। मैं अपने वास्तविक जीवन के प्रोजेक्ट में केवल उसी चीज को डिजाइन करके कदम दर कदम आगे बढ़ना चाहता हूं जिसकी मुझे वास्तव में जरूरत है।

क्या MVVM का कोई आसान चरण-दर-चरण संदर्भ है? क्या MVVM एक सुपर-सेट या MVC का उप-सेट है? कौन सा पैटर्न आधुनिक है और मुझे अपने एप्लिकेशन के विंडोज और वेब संस्करणों के लिए कौन सा चुनना चाहिए?

कुछ कक्षाएं हैं जिन्हें मुझे शायद ही कभी व्यू से कनेक्ट करने की आवश्यकता है। उस स्थिति में, MVVM तरीके से एक ही वर्ग डिजाइन करना एक अतिरिक्त श्रम साबित होगा।

जवाबों:


11

क्या MVVM का कोई आसान चरण-दर-चरण संदर्भ है?

हाँ वहाँ है। यहाँ एक नज़र रखना।

क्या MVVM एक सुपर-सेट या MVC का उप-सेट है?

MVVM MVC परिवार के अंतर्गत आता है, इसलिए, यदि आप कह सकते हैं कि यह एक सबसेट है। यह यूआई को व्यापार तर्क के नीचे से अलग करने का एक प्रकार है। मैं इसे MVC के सहोदर के रूप में वर्णित करूँगा। ओओपी के शुरुआती दिनों से लोग यूआई को अपने तर्क से अलग करने के तरीके खोज रहे हैं। एमवीसी पहला आर्कषक था जो विकसित हुआ। यह बहुत आसान है, हालांकि ज्यादातर लोग इसे सही नहीं पाते हैं। दृश्य केवल मॉडल के लिए एक पर्यवेक्षक है और आवश्यक होने पर इसे कॉल करता है। नियंत्रक केवल मॉडल के साथ संवाद करने के लिए दृश्य के लिए एक रणनीति है, उदाहरण के लिए जब आपको एक विनिमेय व्यवहार (यानी ReadonlyController, AdminController) की आवश्यकता होती है। MVC बहुत सफल है और इसे लागू करने के लिए वास्तव में एक अच्छा अभ्यास है।

MVVM एक विशेष प्रकार का MVP पैटर्न है, जैसा कि मार्टिन फाउलर द्वारा वर्णित है । MVP दृश्य को जितना संभव हो सके गूंगा रखने की कोशिश करता है (जबकि अभी भी उपयोगकर्ता इनपुट आदि ले रहा है), इस प्रकार परीक्षण क्षमता को बढ़ाता है। इसका उद्देश्य दृश्य और संपर्क-तर्क को रोकना है जिसे प्रस्तुतकर्ता में रखना है। प्रस्तुतकर्ता केवल मॉडल / व्यावसायिक तर्क के साथ संचार करता है और दृश्य को अद्यतन करता है। मार्टिन फाउलर अपने प्रस्तुतिकरण मॉडल पैटर्न में MVVM का बहुत वर्णन करते हैं।

दृश्य पूरी तरह से एक ViewModel में सार है। जब Viewकिसी संपत्ति की ViewModelजरूरत होती है, तो उसके पास होने की जरूरत भी होती है। यह (ViewModel) अंतर्निहित UI- प्रौद्योगिकी, एक अमूर्तता से पूरी तरह से स्वतंत्र होने के लिए है। दृश्य और ViewModel के बीच संवाद करने के लिए, एक सिंक्रनाइज़ेशन पैटर्न का उपयोग करने की आवश्यकता है (यानी ऑब्जर्वर)। यह एक निष्क्रिय वेब वातावरण में पूरा करना आसान नहीं है। MVVM MVP से भिन्न होता है, क्योंकि दृश्य अब आपके मॉडल / व्यावसायिक तर्क से नहीं, बल्कि ViewModel से जुड़ता है।

कौन सा पैटर्न आधुनिक है और मुझे अपने एप्लिकेशन के विंडोज और वेब संस्करणों के लिए कौन सा चुनना चाहिए?

सिद्धांत रूप में प्रस्तुति मॉडल (एमवीवीएम-जैसे) पूरी तरह से उपयोग में यूआई-तकनीक से स्वतंत्र होना चाहिए। हालांकि, सिंक्रोनाइजेशन पहलू को कवर करने की आवश्यकता है। यह आसानी से CommF और गुण WPF के साथ बाइंडिंग द्वारा किया जा सकता है, जहां सिंक्रनाइज़ेशन गोंद पहले से मौजूद है। ASP.NET के साथ, यह एक अलग कहानी है। हालाँकि, कोडप्रोजेक्ट पर एक लेख है जिसमें सभी विंडोज़ यूआई तकनीकों के साथ प्रेजेंटेशन मॉडल पैटर्न का उपयोग किया गया है। एक नज़र देख लो।


4

जीवनचक्र के मुद्दों और पेज पोस्ट के बीच स्थिति को बनाए रखने की आवश्यकता के कारण, आपको वेब और WPF के बीच अपने किसी भी UI कोड का 100% पुन: उपयोग करने में बहुत मुश्किल होगी। Asp.net में शक्तिशाली डेटा बाइंडिंग नहीं है जो MVVM के लिए आवश्यक है, इन दिनों jscript में भी बहुत सारे लॉजिक को चलाने की जरूरत है क्योंकि लोगों को उम्मीद है कि यूआई पोस्टबैक की आवश्यकता के बिना अपने आप को अपडेट कर सकता है।

यदि आप सिल्वरलाइट का उपयोग कर सकते हैं तो आपका जीवन बहुत कम जटिल होगा :-)

इसी तरह क्या आप UI के सामान्य बिट्स के लिए अपने WPF ऐप में वेब-ब्राउज़र होस्ट कर सकते हैं?


सिल्वरलाइट से मुझे क्या लाभ हो सकता है?
RPK

1
@PRK, सिल्वरलाइट ज्यादातर आपको वह सब कुछ करने देगा जो WPF करता है और अगर आप इसे स्थापित करने के लिए अपने सभी "वेब" उपयोगकर्ताओं को प्राप्त कर सकते हैं, तो एक समाधान भी बनाने देंगे जो वेब पर पहुँचा जा सकता है और वेब ऐप की तरह "महसूस" करता है।
इयान

4

ASP.Net और WPF आधारित UI के लिए समान कक्षाओं का उपयोग करने का आपका इरादा बहुत व्यावहारिक नहीं है। डेटाबाइंडिंग और वेब पर जावास्क्रिप्ट का उपयोग WPF के लिए बहुत अलग है। एकमात्र विकल्प जो मैं सोच सकता हूं वह पूरी तरह से निष्क्रिय दृश्य के साथ एमवीपी है । सिद्धांत रूप में आपके पास एक ही प्रस्तुतकर्ता हो सकता है जो वेब और WPF पृष्ठ को पॉप्युलेट करता है।
व्यवहार में मैं एक आर्किटेक्चर विकसित करूंगा, जहां अधिकांश व्यावसायिक नियम एक वेब सेवा परत में हैं और दो अलग-अलग प्रस्तुति टियर हैं जहां संभव है कि इस वेब सेवा के साथ बातचीत करने के लिए कम से कम व्यावसायिक नियम हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.