[译]: MVC, MVP 和 MVVM 模式的对比

原文: http://www.andyfrench.info/2010/07/comparing-mvc-mvp-and-mvvm-patterns...html

译注: 这篇文章提到的模式应该主要指的微软旗下图形界面技术的模式.设计模式

最近看了一些技术演讲, 以为本身应该储备一下常引用到的一些设计模式.mvc

Silverlight 和 WPF 常常关联 Model-View-ViewModel (MVVM) 模式,
(见框架好比: Prism, MVVM Light, Caliburn 等)框架

ASP.Net MVC 固然运用了 Model-View-Controller.
之前我还用 Model-View-Presenter (MVP) 的变种来解决 ASP.Net Web Forms 一些短板.mvvm

每一个框架都在尝试解决这样一些问题:测试

  1. 在哪里? 怎样? 去维护 UI 当中的状态?
  2. 业务逻辑在应用的什么地方? 怎样被调用?
  3. 怎样保证 UI 跟数据的改变同步? 还有 UI 元素之间相互同步?
  4. 怎样保证对咱们关心的代码作分离, 来下降可测试代码的耦合?

问题在于, 它们对比是怎样?spa

Note: There are variations on the theme here so there may be alternatives especially with MVP (e.g. Passive View, Supervising Controller, Front Controller).设计

注意: 如今的场景当中会有不少的变种的方案, 特别是 MVP,
(好比 Passive View, Supervising Controller, Front Controller)orm

MVC

Input 被引导到 Controller.htm

Controller 决定渲染哪一个 View, 而且生成 View 对应的 Model.

一个 Controller 能够从不少个 View 当中选择一个渲染.

View 没有他的 Controller 的信息.

业务逻辑存在于 Controller 当中.

当多个用户请求之间(基于 HTTP, 无状态的协议), 状态不能被维护的状况下, MVC 是有用的.

MVP

Input 被引导到 View.

每每是在 View 抛出一个事件时, 做为响应, Presenter 对 View 进行更新.

State 被高效地存储在 View 当中.

业务逻辑存在于 Presenter.

MVVM

Input 被引导到 View.

View 只知道 ViewModel, 不知道其余的信息.

ViewModel 只知道 Model, 不知道其余的信息.

View 从 ViewModel 获取数据, 而不是直接从 Model. 这一般经过数据绑定实现.

State 跟业务逻辑存在于 ViewModel.

ViewModel 能够被认为是 UI 的抽象表示.

State 能够在多个用户请求能被维护的状况下会颇有用(好比 Silverlight, WPF 等).

相关文章
相关标签/搜索