2010-08-06 21 views
7

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

तो मेरा सवाल है - क्या एमवीवीएम वेब-आधारित ऐप्स के लिए एक वैध पैटर्न है? यदि ऐसा है, तो यूआई को सिल्वरलाइट होना चाहिए? मैं यह तय करने की प्रक्रिया में हूं कि कौन सी तकनीकों को एक नई मध्य आकार की वेबसाइट के लिए उपयोग करना है, जिसे हमें डिजाइन करने की आवश्यकता है, और सिल्वरलाइट शक्तियों के लिए एक कठिन बिक्री हो सकता है, हालांकि, दृश्यों के पीछे हम जो भी उपयोग करते हैं, इससे कोई फर्क नहीं पड़ता बहुत ज्यादा।

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

+9

आपको * अपने कुछ खुले प्रश्नों को बंद करना चाहिए, अन्यथा लोग जवाब देने के इच्छुक नहीं होंगे। –

+0

यदि आप वेबपृष्ठों पर एमवीवीएम का उपयोग करना चाहते हैं तो आपको बाध्यकारी के लिए नॉकआउट जेएस उपयोगी भी मिल सकता है। –

+0

एमवीवीएम एकल-पेज अनुप्रयोगों (एसपीए) के लिए बहुत अच्छी तरह से काम करता है, उदाहरण के लिए एंगुलरजेएस इसका उपयोग करता है। एक प्रोजेक्ट में, मैंने एक जेएस फ्रेमवर्क लागू किया जो नॉकआउटजेएस का उपयोग करता है और डब्ल्यूपीएफ/एक्सएएमएल जैसे काम करता है: http://vistojs.org –

उत्तर

2

एमवीवीएम वेब विकास के लिए पूरी तरह स्वीकार्य है। वास्तव में, सिल्वरलाइट विकास के लिए इसकी सिफारिश की जाती है। हमारी कंपनी बड़ी सफलता के साथ हमारी कई परियोजनाओं के लिए एमवीवीएम + सिल्वरलाइट का उपयोग करती है। प्रारंभिक सीखने की अवस्था कठिन हो सकती है, लेकिन एक बार यह क्लिक होने पर, यह बहुत सारे लाभ प्रदान करता है।

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

टिम हेउयर के पास सिल्वरलाइट के साथ एमवीवीएम पर कुछ उत्कृष्ट ट्यूटोरियल और वीडियो हैं। मैं अत्यधिक उसकी सामग्री के माध्यम से जाने की सलाह देते हैं। http://timheuer.com/blog/articles/getting-started-with-silverlight-development.aspx

3

एमवीवीएम अनिवार्य रूप से एमवीसी पैटर्न है जो विंडोज प्रेजेंटेशन फाउंडेशन का उपयोग कर अनुप्रयोगों के विकास को समर्थन देने के लिए विशिष्ट परिवर्तनों के साथ है।

मॉडल - देखें - ViewModel
मॉडल - देखें - नियंत्रक

तो ViewModel MVVM में नियंत्रक है। पैटर्न बहुत अच्छा है; यह उन अनुप्रयोगों को बनाना बहुत आसान बनाता है जो सरल लेकिन शक्तिशाली हैं, और परीक्षण और रखरखाव करना आसान है।

यदि आप किसी ऐसे वेब एप्लिकेशन में एमवीवीएम का उपयोग करना चाहते हैं जो सिल्वरलाइट नहीं है, तो ASP.NET MVC देखें। यदि आप सिल्वरलाइट का उपयोग कर रहे हैं तो एमवीवीएम भी एक विकल्प है। आप एमवीसी वेबसाइट में अपने सिल्वरलाइट ऐप को होस्ट करने, दोनों को भी मिश्रण कर सकते हैं।

1

वेब विकास के लिए मैं एमवीसी के लिए जाना चाहूंगा। यदि इसकी पूरी तरह से Silveright है तो एमवीवीएम

+0

मैं सहमत हूं। मैंने Silverlight में MvvMw को लागू करते समय एक लड़के के नुकसान/डिजाइन मुद्दों के बारे में एक लेख पढ़ा है; यह बहुत छोड़ दिया गया था। एएसपीएनटी एमवीसी (कोई भी, अधिक या कम) के साथ कठिनाइयों की तुलना में मैं निश्चित रूप से एमवीसी का उपयोग एमवीवीएम पर करूँगा। – Michel

+0

जहां तक ​​मुझे समझा गया, एमवीवीएम सिल्वरलाइट में डेटा और दृश्य के बीच स्वचालित बाध्यकारी के साथ प्रयोग किया जाता है: जब डेटा (मॉडल) अपडेट होता है, तो दृश्य अधिसूचित हो जाता है और अपडेट प्रदर्शित करता है। मुझे यकीन नहीं है कि यह एमवीवीएम के लिए केवल कार्यान्वयन है, लेकिन चांदी की रोशनी से स्वत: अद्यतन मॉडल कुछ ऐसा है जो मैं वेबप्रोजेक्ट्स में उपयोग नहीं करता हूं। – Michel

4

वेब वेब (एचटीएमएल) के लिए यह वास्तव में उपयोग करने योग्य नहीं है क्योंकि बिंदु एमवीवीएम को इंटरफ़ेस को तुरंत व्यूमोडेल में परिवर्तन को प्रतिबिंबित करना है। (डेटाबेस/घटनाओं के माध्यम से)।

वेब के लिए, व्यूमोडेल में बदलाव आमतौर पर स्क्रीन का एक पोस्ट + पूर्ण पुनर्निर्माण होता है।
तो परेशान क्यों करें ..

हालांकि यदि आपके पास एक निश्चित HTML पृष्ठ वाला AJAX वेबसाइट है, तो सामग्री को जावास्क्रिप्ट के साथ लगातार अद्यतन किया जाता है। फिर यह दिलचस्प हो जाता है।

+1

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

0

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

चेक नीचे दिए गए लिंक: http://msdn.microsoft.com/en-us/scriptjunkie/hh297451

6

बेशक MVVM वैध "वेब" पैटर्न है, लेकिन वर्तमान में यह बहुत ही सीमित उपयोग करता है वहाँ MSDN पर नमूना ऐसा करने के तरीके के बारे में है।

एमवीसी और एमवीवीएम के बीच मुख्य अंतर आपके एप्लिकेशन डेटा को अपडेट करने में है। घुमावदार वेब अनुप्रयोगों के लिए एमवीसी को प्राथमिकता दी जाती है क्योंकि वेब ज्यादातर एक तरफा संचार होता है और सभी उपयोगकर्ता इनपुट फॉर्म के साथ encapsulated है।

समृद्ध यूआई के साथ वास्तव में इंटरैक्टिव अनुप्रयोग बनाते समय एमवीवीएम उपयोगी हो जाता है।

तो इसे आसान बनाने के लिए। यदि आप ASP.NET (या किसी अन्य सर्वर-साइड उन्मुख tehnique) के साथ वेब समाधान bulding कर रहे हैं तो एमवीसी का उपयोग करें। यदि आप समृद्ध यूआई अनुप्रयोग बना रहे हैं तो एमवीवीएम का उपयोग करें और यदि आपको सिल्वरलाइट पसंद नहीं है तो जावास्क्रिप्ट समाधान के लिए KnockoutJS को आजमाएं।

5

एमवीवीएम वेब और एक्सएएमएल आधारित तकनीक में अच्छी तरह से काम कर सकता है। एक्सएएमएल तकनीक की भयानक बाध्यकारी विशेषताओं में एक बढ़त है जो बेक किया गया है। लेकिन जावास्क्रिप्ट पुस्तकालयों जैसे कि नॉकआउट (जो उत्कृष्ट है) और जेएसवीव्स/जेएसआरेंडर (जिसे आपको एक बार जेएसवीव्स बीटा जाता है) में देखना चाहिए।

आपको विशेष रूप से उत्तर देने के लिए: हाँ, आप वेब ऐप्स के साथ एमवीवीएम कर सकते हैं। अच्छी है? हां, यदि आप नॉकआउट (http://knockoutjs.com) जैसी लाइब्रेरी का उपयोग करते हैं। MVVM की चाबी है कि में हैं इसकी एक सरल जुदाई पैटर्न है कि:

  1. अलग करती है दृश्य (पेज)
  2. मॉडल (कच्चे डेटा)
  3. viewmodel (प्रस्तुति तर्क) को अलग करती है
अलग करती है

कहीं भी एमवीवीएम द्वारा निर्धारित तकनीक नहीं है। दृश्य आपका एचटीएमएल, आपकी संरचना है। मॉडल आपका डेटा है (शायद JSON)। व्यूमोडेल आपकी जावास्क्रिप्ट ऑब्जेक्ट है जो आपके विशिष्ट दृश्य के लिए तर्क को अलग करता है।

नॉकआउट एक अवधारणा के माध्यम से दिन के डेटा बाइंडिंग के साधन प्रदान करता है जो इसे अवलोकन कहता है। मूल रूप से, इस बारे में सोचें INOTifyPropertyChanged इंटरफ़ेस लेकिन जावास्क्रिप्ट के लिए। नॉकआउट भी अवलोकन योग्य का समर्थन करता है (जो एक्सएएमएल में ऑब्जर्जेबल कोलेक्शन के समान है)। नॉकआउट में अन्य सुविधाओं का एक गुच्छा है जो आपको डेटा परिवर्तन घटनाओं की सदस्यता लेने, व्यवहार बनाने, कस्टम बाध्यकारी और बहुत कुछ करने की अनुमति देता है। वैसे भी ... नॉकआउट के साथ आप थोड़ा सा मिलता है।

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

लंबा उत्तर ... लेकिन मैं आपको खोजना शुरू करना चाहता था।

0

जैसा कि बताया गया है, Knockout.js एक शानदार पुस्तकालय है जो वेब पर एमवीवीएम के लिए आवश्यक कई सुविधाएं प्रदान करता है। मैंने एक समग्र ढांचा बनाया है जो एक बहुत अधिक पूर्ण एमवीवीएम ढांचा है। यह माइक्रोसॉफ्ट के प्रिज्म के समानताएं प्राप्त कर रहा है और इसका उपयोग बड़े और जटिल उत्पाद लक्ष्यीकरण वेब और मोबाइल प्लेटफार्मों में किया जा रहा है।

इसे देखें: http://danderson00.blogspot.com/2012/08/introducing-knockoutcomposite.html

12

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

दृश्य इस तरह दिखता है - यह एक HTML सर्वर नियंत्रण और डेटा-बाइंडिंग के साथ बढ़ाया है:

<div class="form-control"> 
    <dot:TextBox Text="{value: Name}" /> 
</div> 
<div class="form-control"> 
    <dot:TextBox Text="{value: Email}" /> 
</div> 
<div class="button-bar"> 
    <dot:Button Text="Submit" Click="{command: Submit()}" /> 
</div> 

viewmodel एक सी # वर्ग जो इस तरह दिखता है:

नहीं है Visual Studio Extension जो इंटेलिसेन्स और प्रोजेक्ट टेम्पलेट्स जोड़ता है।

ढांचा सत्यापन, स्थानीयकरण, एसपीए और अन्य अक्सर उपयोग की जाने वाली विशेषताओं को संभालता है। यह .NET Framework और .NET कोर दोनों का समर्थन करता है।

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