10

我一直在阅读 MVVM 并且到目前为止发现它非常有趣。然而,我发现的大多数示例都是针对 Windows 应用程序的,而不是 Web 应用程序。我还看到很多人提到 MVVM 与 Silverlight 一起使用,而且我知道 Silverlight 可用于 Web 或 Windows 应用程序。

所以我的问题是——MVVM 是基于 Web 的应用程序的有效模式吗?如果是,用户界面是否必须是 Silverlight?我正在决定为我们需要设计的新中型网站使用哪些技术,Silverlight 可能很难卖给当权者,尽管我们在幕后使用什么并不重要非常。

任何人都可以提供有关在 Web 环境中使用 MVVM 的任何信息,我们将不胜感激。示例代码也会很棒。

4

10 回答 10

13

DotVVM是基于 Knockout JS 的基于 ASP.NET 的开源 MVVM 框架。它使用简单,您不必编写大量的 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。

于 2015-10-11T13:35:17.030 回答
8

当然 MVVM 是有效的“网络”模式,但目前它的用途非常有限。

MVC 和 MVVM 之间的主要区别在于更新应用程序数据。对于当前的 Web 应用程序,首选 MVC,因为 Web 主要是单向通信,并且所有用户输入都用表单封装。

MVVM 在创建具有丰富 UI 的真正交互式应用程序时非常有用。

所以要简单点。如果您正在使用 ASP.NET(或任何其他面向服务器端的技术)构建 Web 解决方案,请使用 MVC。如果您正在制作丰富的 UI 应用程序,请使用 MVVM,如果您不喜欢 Silverlight,请尝试使用 KnockoutJS 的 Javascript 解决方案。

于 2012-01-03T09:13:23.007 回答
6

MVVM 可以在 Web 和基于 XAML 的技术中很好地工作。XAML 技术在其令人敬畏的绑定特性方面具有优势,这些特性已经融入其中。但是对于诸如 Knockout(非常棒)和 JsViews/JsRender(一旦 JsViews 进入测试版,你应该研究一下)之类的 JavaScript 库。

具体回答您:是的,您可以使用 Web 应用程序执行 MVVM。好吗?是的,如果您使用像 Knockout (http://knockoutjs.com) 这样的库。MVVM 的关键在于其简单的分离模式:

  1. 分隔视图(页面)
  2. 分离模型(原始数据)
  3. 分离视图模型(表示逻辑)

MVVM 规定的技术在任何地方都没有。视图是你的 html,你的结构。模型是您的数据(可能是 JSON)。viewmodel 是您的 javascript 对象,用于分隔特定视图的逻辑。

Knockout 通过称为 observables 的概念提供了日常数据绑定的方法。基本上,将其视为 INotifyPropertyChanged 接口,但用于 JavaScript。Knockout 还支持 observableArray(类似于 XAML 中的 ObservableCollection)。Knockout 还有许多其他功能,允许您订阅数据更改事件、创建行为、自定义绑定等等。无论如何......通过淘汰赛你会得到很多。

如果您选择在没有 Knockout 之类的库的情况下进行 MVVM,您仍然可以这样做,但您会失去数据绑定功能,并且可能想自己编写一些东西。但我强烈建议坚持使用为您执行此操作的库。

长答案......但我想给你足够的开始探索。

于 2012-01-04T02:23:51.200 回答
4

对于 web web(html),它并不是真正可用的,因为 mvvm 的目的是让接口立即反映视图模型中的变化。(通过数据绑定/事件)。

对于 web,视图模型的更改通常是后期 + 完全重建屏幕。
那么,何必打扰..

但是,如果您有一个带有一个固定 HTML 页面的 AJAX 网站,并且该页面的内容会使用 javascript 不断更新。然后它变得有趣。

于 2010-08-07T05:47:44.620 回答
3

MVVM 本质上是具有特定更改的 MVC 模式,以支持使用 Windows Presentation Foundation 开发应用程序。

模型 - 视图 - ViewModel
模型 - 视图 - 控制器

所以 ViewModel 是 MVVM 中的 Controller。图案非常好;它使构建简单而强大的应用程序变得非常容易,并且易于测试和维护。

如果您希望在不是 Silverlight 的 Web 应用程序中使用 MVVM,请查看ASP.NET MVC。如果您使用 Silverlight,MVVM 也是一个选项。您甚至可以混合使用这两者,将您的 Silverlight 应用程序托管在 MVC 网站中。

于 2010-08-06T13:43:44.850 回答
2

MVVM 对于 Web 开发来说是完全可以接受的。事实上,它被推荐用于 Silverlight 开发。我们公司在我们的许多项目中都使用了 MVVM + Silverlight,并取得了巨大的成功。最初的学习曲线可能很艰难,但一旦成功,它就会带来很多好处。

在我看来,要让 MVVM 真正发挥作用,你需要一个具有正确绑定支持的框架。否则,您将不得不编写大量“粘合”代码来加入您的视图和视图模型。Silverlight 具有出色的绑定支持,如果操作正确,您可以消除视图中的大部分代码隐藏,因此所有业务逻辑都保留在 ViewModel 中。

Tim Heuer 有一些关于使用 Silverlight 的 MVVM 的优秀教程和视频。我强烈建议通过他的东西。 http://timheuer.com/blog/articles/getting-started-with-silverlight-development.aspx

于 2010-08-06T13:38:24.847 回答
1

对于 Web 开发,我宁愿选择 MVC。如果它纯粹是 Silveright,那么可以考虑使用 MVVM

于 2010-08-06T13:43:57.323 回答
1

我有一个使用各种技术、Knockout、jQuery、Websockets 和 .NET 的 Web MVVM 实现。在这里查看文章:http: //salmanq.com/blog/using-the-mvvm-pattern-on-web-applications-part-i/2013/02/

于 2013-03-06T19:09:04.230 回答
0

如前所述,Knockout.js是一个出色的库,它提供了 Web 上 MVVM 所需的许多功能。我创建了一个复合框架,它是一个更完整的 MVVM 框架。它与微软的 Prism 有相似之处,并被用于针对 Web 和移动平台的相当大而复杂的产品中。

看看:http ://danderson00.blogspot.com/2012/08/introducing-knockoutcomposite.html

于 2013-01-16T03:27:18.370 回答
0

WPF 和 Silverlight 完全可以接受 MVVM。如果您想使用 MVVM 进行 Web 开发,您将不​​得不编写大量的 jscript 代码。MSDN上有关于如何执行此操作的示例:

检查以下链接:http: //msdn.microsoft.com/en-us/scriptjunkie/hh297451

于 2011-10-18T22:05:09.250 回答