Nei*_*ell 35 asp.net-mvc design-patterns mvvm viewmodel
ViewModel是MVVM(Model-View-ViewModel)和ASP.NET MVC的推荐实现中使用的术语.研究"ViewModel"可能会让人感到困惑,因为每个模式都使用相同的术语.
MVC ViewModel和MVVM ViewModel之间的主要区别是什么?例如,我认为MVVM ViewModel更加丰富,因为缺少Controller.这是真的?
Ada*_*lph 48
一个相当具有挑战性的问题简明扼要地回答,但我会尝试一下.(请记住,这些问题的答案仍然是开发人员争论的主题.)
在MVC中,ViewModel提供了呈现View所需的所有信息.它包含的数据是使用模型中定义的数据创建的.View读取ViewModel并呈现输出.来自View的输入传递给Controller,Controller操纵Model,构造一个合适的ViewModel,并将其传递给View进行渲染.
在MVVM中,ViewModel提供与MVC相同的功能,但它也通过提供允许View操作Model的命令来替换MVC Controller的一部分.WPF数据绑定根据ViewModel中的更改管理View的更新(这有效地取代了MVC Controller的剩余功能).
小智 5
我知道这是一个(方式)老问题,但我已经指出它作为在 MVC 上下文中使用“视图模型”的示例。我认为这是不正确的,可能会导致不熟悉其中一种/或两种模式的人感到困惑。不管是谁在做——stahp。这就是原因(它甚至以迂回的方式回答了原始问题)。
在这个问题中可以看到这种情况何时发生的一个例子。用户试图在 ASP.NET MVC 应用程序中使用实现 INotifyPropertyChanged 的视图模型,从而在架构失败和心碎中将桌面和无状态 Web 应用程序设计混合在一起。
简单来说,MVC模式中没有“视图模型”。还有就是然而,功能等同,这就是控制器。只是为了清楚零件及其用途,
MVVM(桌面应用程序):
MVC(网络应用程序):
两种模式中的模型实际上是相同的。桌面模型可以实现更新事件通知,网络模型可以是动态的(即,非强类型),并且两者都可能包含也可能不包含验证方法或元数据。
桌面中的 View是用户看到的。在网络中,它是一个生成器,为浏览器输出 HTML 以显示在客户端。它必须解释桌面上的用户交互,但在由客户端 javascript、浏览器和发送回服务器的请求处理的 Web 上。
视图模型/控制器在功能上大致相同,但它们的实现方式和操作方式大不相同。 在 View Model 中,用户与应用程序的交互通过 ICommands、路由事件和其他方法转移到 View Models(许多 MVVM 框架提供了不同的方式将 View Models 挂接到 UI 和应用程序的其他部分)。 在控制器中,一个请求包含控制器返回结果给用户所需的所有信息(假设它是一个 200 OK 请求)。控制器必须执行任何必要的工作来创建 HTML 生成器(视图)创建响应所需的状态(又名模型)。在设计方面,控制器位于视图和模型之上,知道并控制两者,而视图模型位于视图旁边,在它们之间传递模型(和其他信息)。
真正让一些人感到困惑的是,您可以将客户端 MVVM 框架混合到您的 MVC 应用程序中。这些仅存在于用户浏览器中的 javascript 中,与您在服务器端遵循的任何特定模式无关。您可以运行一个在客户端使用 MVVM 的经典 ASP 网站。该死,您可以在客户端运行使用 MVVM 的静态 HTML 页面。他们是分开的。
这些 javascript MVVM 框架通常遵循与上述桌面 MVVM 模式类似的模式,但经过调整以更适应 HTML DOM 和 javascript 的性质。例如,DOM 中没有广泛的绑定系统,而且 javascript 的类型系统非常有限,因此模板与模型的匹配与 WPF 中的有很大不同。它们通常也与服务器断开连接,当它们需要交互时,更喜欢 AJAX 调用而不是将页面 POST 回控制器(AJAX 调用通常由 ASP.NET MVC 中的 WebAPI 控制器处理)。
因此,总而言之,MVC 中确实没有视图模型。Controller 是粗略的等价物,但它在接收用户输入、解释输入和将结果返回给用户的方式上有很大不同。使用术语“视图模型”来指代 MVC 中的任何东西只会导致混淆,因此应该避免。对模式的适当部分使用适当的术语。这可能看起来很迂腐,但它应该有助于使事情变得清晰,并且对两种模式都不熟悉的人来说不会那么困惑。
| 归档时间: |
|
| 查看次数: |
14329 次 |
| 最近记录: |