[翻译]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,如需转载请自行联系原作者

相关文章
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
686 0
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
517 4
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
2087 1
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
704 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
运维 供应链 前端开发
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
1004 4
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
设计模式 JSON 前端开发
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(2)
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
290 0
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(2)
|
设计模式 JSON 前端开发
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(1)
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
413 0
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)(1)
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
1067 0