我一直在阅读MVVM,到目前为止已经发现它非常有趣。但是,我发现的大多数示例都适用于Windows应用程序,而不是Web应用程序。我也看到很多提到与Silverlight一起使用的MVVM,我知道Silverlight可以用于Web或Windows应用程序。
所以我的问题是 - MVVM是基于Web的应用程序的有效模式吗?如果是,UI必须是Silverlight吗?我正在决定将哪些技术用于我们需要设计的新中型网站,而Silverlight可能是对权力的强烈推销 - 尽管我们在幕后使用的技术并不重要非常。
任何人都可以在网络环境中使用MVVM提供的任何信息都将受到赞赏。示例代码也很棒。
答案 0 :(得分:12)
DotVVM是一个基于ASP.NET的开源MVVM框架,基于Knockout JS。它使用简单,您不必编写大量的Javascript代码。对于大多数情况,您只需要C#和带CSS的HTML。
视图看起来像这样 - 它是一个扩展了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是一个C#类,如下所示:
public class ContactFormViewModel
{
public string Name { get; set; }
public string Email { get; set; }
public void Submit()
{
ContactService.Submit(Name, Email);
}
}
还有Visual Studio Extension添加了IntelliSense和项目模板。
该框架处理验证,本地化,SPA和其他常用功能。它支持.NET Framework和.NET Core。
答案 1 :(得分:7)
当然MVVM是有效的“网络”模式,但目前它的用途非常有限。
MVC和MVVM之间的主要区别在于更新您的应用程序数据。对于当前的Web应用程序,MVC是首选,因为Web主要是单向通信,所有用户输入都是用表单封装的。
MVVM在创建具有丰富UI的真正交互式应用程序时非常有用。
所以要简单一点。如果您使用ASP.NET(或任何其他面向服务器端的tehnique)构建Web解决方案,则使用MVC。 如果你正在使用丰富的UI应用程序使用MVVM,如果你不喜欢Silverlight,请尝试使用KnockoutJS进行Javascript解决方案。
答案 2 :(得分:6)
MVVM可以在Web和基于XAML的技术中很好地工作。 XAML技术在其出色的绑定功能方面具有优势。但是使用了诸如Knockout(非常好)和JsViews / JsRender之类的JavaScript库(一旦JsViews进入测试阶段,你应该看看它)。
具体回答:是的,您可以使用网络应用程序进行MVVM。好吗?是的,如果你使用像Knockout这样的库(http://knockoutjs.com)。 MVVM的关键在于它是一个简单的分离模式:
MVVM规定的技术无处可去。视图是你的html,你的结构。该模型是您的数据(可能是JSON)。 viewmodel是您的javascript对象,用于分隔特定视图的逻辑。
Knockout通过一个名为observables的概念提供日间数据绑定的方法。基本上,想想这就像INotifyPropertyChanged接口,但对于JavaScript。 Knockout还支持observableArray(类似于XAML中的ObservableCollection)。 Knockout还有许多其他功能,允许您订阅数据更改事件,创建行为,自定义绑定等等。无论如何......有了Knockout,你会得到很多。
如果您选择在没有Knockout等库的情况下进行MVVM,您仍然可以这样做,但是您会丢失数据绑定功能,并且可能想要自己编写一些内容。但我强烈建议您坚持使用能够为您完成此任务的库。
答案很长......但我想让你开始探索。
答案 3 :(得分:4)
对于web web(html)来说,它并不是真正可用的,因为mvvm是让界面立即反映viewmodel中的变化。 (通过数据绑定/事件)。
对于web,viewmodel中的更改通常是对屏幕的post + complete rebuild
那么为什么要打扰..
但是,如果您有一个带有一个固定HTML页面的AJAX网站,那么使用javascript不断更新内容。然后它变得有趣。
答案 4 :(得分:3)
MVVM本质上是MVC模式,具有支持使用Windows Presentation Foundation开发应用程序的特定更改。
模型 - 视图 - ViewModel
模型 - 视图 - 控制器
因此ViewModel是MVVM中的Controller。模式非常好;它使构建简单但功能强大且易于测试和维护的应用程序非常容易。
如果您希望在不是Silverlight的Web应用程序中使用MVVM,请查看ASP.NET MVC。如果您使用Silverlight,MVVM也是一个选项。您甚至可以将这两者混合在一起,在MVC网站上托管您的Silverlight应用程序。
答案 5 :(得分:2)
MVVM完全可以用于Web开发。实际上,它建议用于Silverlight开发。我们公司在我们的许多项目中使用MVVM + Silverlight取得了巨大成功。最初的学习曲线可能很难,但一旦点击,它就会带来很多好处。
在我看来,要使MVVM真正起作用,您需要一个具有正确绑定支持的框架。否则,您将不得不编写大量“粘合”代码来加入您的视图和查看模型。 Silverlight具有出色的绑定支持,如果操作正确,您可以在视图中消除大部分代码隐藏,因此您的所有业务逻辑都保留在ViewModel中。
Tim Heuer在SilverVM上有一些关于MVVM的优秀教程和视频。我强烈建议你去看看他的东西。 http://timheuer.com/blog/articles/getting-started-with-silverlight-development.aspx
答案 6 :(得分:1)
对于Web开发,我宁愿选择MVC。如果它纯粹是Silverlight,则可以考虑MVVM
答案 7 :(得分:1)
我使用各种技术(Knockout,jQuery,Websockets和.NET)为Web实现MVVM。在这里查看文章:http://salmanq.com/blog/using-the-mvvm-pattern-on-web-applications-part-i/2013/02/
答案 8 :(得分:0)
MVVM完全可以接受WPF和Silverlight。如果要使用MVVM进行Web开发,则必须编写大量的jscript代码。 MSDN上有关于如何执行此操作的示例:
检查以下链接: http://msdn.microsoft.com/en-us/scriptjunkie/hh297451
答案 9 :(得分:0)
如上所述,Knockout.js是一个很棒的库,它提供了网络上MVVM所需的许多功能。我创建了一个复合框架,它是一个更完整的MVVM框架。它与微软的Prism有相似之处,并被用于一个针对网络和移动平台的相当大而复杂的产品。
检查出来:http://danderson00.blogspot.com/2012/08/introducing-knockoutcomposite.html