[翻译]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表现模式架构对比

简介:

翻译 CodeProject 上的一篇文章,对常见的几种表现模式 (Presentation patterns) 进行了说明,并进行对比。原文地址是http://www.codeproject.com/KB/aspnet/ArchitectureComparison.aspx

表现模式 (Presentation patterns) 背景

与用户界面 (UI) 相关的最大的问题就是大量的凌乱的代码,主要是由这两个因素造成的,首先是用户界面包含负责的逻辑用于维护界面相关对象,其次也包含了应用程序状态的维护。表现模式 (Presentation patterns) 就是围绕如何移除用户界面的复杂性,让界面更加简洁和可管理而产生的,下图就是常见表现模式的种类与分类:表现模式的种类与分类

用户界面的3大问题:状态 (State) , 逻辑 (Logic) ,同步 (Synchronization)

  • 状态 (State) : 状态是用户界面最关心的问题之一。状态是用户界面数据的当前快照,在 Web 应用中,可能是 Session 级别的一个变量,在 Windows 应用中, 则可能只是界面级别的数据。 用户界面包含的状态越多, 则用户界面越复杂。
  • 逻辑 (Logic) : 用户界面往往包含界面逻辑,例如维护文本框、组合框或者其它任何界面元素,用户界面中这种逻辑越多,则用户界面越复杂。
  • 同步 (Synchronization) : 用户界面通常需要和业务组件协作,因此用户界面需要在界面元素与业务对象之间同步数据,如果用户界面包含的同步任务越多,则用户界面越复杂。

这三大问题与用户界面的关系如下图:

3Bigproblems

表现设计模式 (Presentation Design Pattern)

表现设计模式有助于解决上面列出的问题, 它的的基本逻辑就是创建一个额外的表现类 (Presenter) ,用来消化用户界面中复杂的逻辑,数据和同步的问题,从而使得用户界面变得简单明了。根据这个类承担责任的多少,决定了表现设计模式的类型,可能是 SC , PV , PM 等,也就是说,这个类的成熟度决定了它将是那种设计模式。

PresenterHowMuch

有用的缩写

缩写 完整形式
V 视图 (View) 或者用户界面 (UI)
P 包含界面逻辑的表现类 (Presenter class which has the UI logic.)
L 用户界面逻辑
S 用户界面的状态
M 业务组件或业务对象
SC 监视控制器 (Supervising controller)
PV 被动视图 (Passive view)
PM 表现模型 (Passive view)

监视控制器模式 (SC)

  • 状态在视图中保存
  • 表现类拥有复杂的表现逻辑,只关注简单的界面绑定逻辑,例如 WPF 或 Silverlight 等提供的绑定机制 (Presenter owns the complex presentation logic. Simple UI binding logic is taken care by using binding technologies like WPF binding and Silverlight binding. Anything complex is taken care presenter class. )
  • 表现类关注视图
  • 视图不关注表现类
  • 视图通过数据绑定和业务模型进行关联

SC

被动视图模式 (PV)

  • 状态在视图中保存
  • 所有的界面逻辑都被包含在表现类中
  • 视图和业务模型完全独立,这种情况下需要一些在业务模型和视图之间进行同步数据的工作
  • 表现类关注视图
  • 视图不关注表现类

PV

表现模型 (PM)

  • 表现类包含逻辑
  • 表现类包含状态
  • 表现类代表抽象的用户界面
  • 表现类不关注用户界面
  • 视图关注表现类
  • 视图与业务模型完全隔离

PM

MVVM

  • 继承自表现模型
  • 使用 WPF 以及 Silverlight 的绑定机制

MVVM

MVC

  • 没有表现类,有控制器 (Controller)
  • 请求首先到达控制器
  • 控制器负责绑定视图与业务模型
  • 逻辑存在于控制器中

MVC

总结与对比

下表是这几种表现模式从状态,逻辑与同步的角度进行的对比

    状态 逻辑 同步
Supervising controller        
  表现类   X X
  视图 X    
  业务模型 视图和业务模型之间通过绑定进行连接。
Passive View        
  表现类   X X
  视图 X    
Presenter model        
  表现类 X X
  视图   X
MVVM        
  表现类 X X
  视图 X
  使用 WPF 、Silverlight 的数据绑定机制
MVC        
  控制器   X X
  视图 X    

再来一个图的对比

theBiggerPicture

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/


本文转自张志敏博客园博客,原文链接:http://www.cnblogs.com/beginor/archive/2010/03/20/1690711.html,如需转载请自行联系原作者

相关文章
|
20小时前
|
前端开发 Java 数据库
MVC架构简述
MVC架构简述
10 4
|
20小时前
|
前端开发
MVVM LiveData+DataBinding+Lifecycle+ViewModel架构
MVVM LiveData+DataBinding+Lifecycle+ViewModel架构
14 1
|
20小时前
|
存储 前端开发 Java
Android应用开发中的MVP架构模式实践
【5月更文挑战第5天】随着移动应用开发的复杂性增加,传统的MVC(Model-View-Controller)架构在应对大型项目时显得笨重且不灵活。本文将探讨一种更适应现代Android应用开发的架构模式——MVP(Model-View-Presenter),并展示如何在Android项目中实现该模式以提升代码的可维护性和可测试性。通过对比分析MVP与传统MVC的差异,以及提供一个实际案例,读者将能深入了解MVP的优势和实施步骤。
|
20小时前
|
前端开发 测试技术 数据处理
安卓开发中的MVP架构模式深度解析
【4月更文挑战第30天】在移动应用开发领域,模型-视图-呈现器(Model-View-Presenter, MVP)是一种广泛采用的架构模式。它旨在通过解耦组件间的直接交互来提高代码的可维护性和可测试性。本文将深入探讨MVP在安卓开发中的应用,揭示其如何促进代码的模块化,提升用户界面的响应性,并简化单元测试过程。我们将从理论概念出发,逐步过渡到实践案例,为读者提供一套行之有效的MVP实施策略。
|
20小时前
|
前端开发 JavaScript
Vue中mvvm/mvc/mvp三者区别
Vue中mvvm/mvc/mvp三者区别
|
20小时前
|
安全 数据管理 中间件
云LIS系统源码JavaScript+B/S架构MVC+SQLSugar医院版检验科云LIS系统源码 可提供演示
检验科云LIS系统源码是医疗机构信息化发展的重要趋势。通过云计算技术实现数据的集中管理和共享可以提高数据利用效率和安全性;通过高效灵活的系统设计和可扩展性可以满足不同医疗机构的需求;通过移动性和智能化可以提高医疗服务的精准度和效率;通过集成性可以实现医疗服务的协同性和效率。因此,多医院版检验科云LIS系统源码将成为未来医疗机构信息化发展的重要方向之一。
27 2
|
20小时前
|
存储 前端开发 Java
软件体系结构 - 架构风格(13)MVC架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(13)MVC架构风格
27 0
|
20小时前
|
前端开发 Java PHP
信息系统架构模型(1) MVC
信息系统架构模型(1) MVC
23 0
|
20小时前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
25 0
|
20小时前
|
XML 前端开发 测试技术
安卓架构模式:MVC、MVP、MVVM及更多
【4月更文挑战第13天】本文探讨了安卓应用开发中的常见架构模式,包括MVC、MVP和MVVM,以及VIPER和Clean Architecture。MVC分离关注点,易于理解,但安卓不直接支持。MVP通过呈现器实现更清晰的分层和便于单元测试。MVVM利用数据绑定简化UI逻辑,适合声明式编程。开发者应根据项目需求、团队技能和维护周期选择合适架构,随着工具和框架的进步,未来将提供更多模块化、可测试性和敏捷性的解决方案。