理解最常用的MVC分层模型及其变种

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【6月更文挑战第24天】 本文介绍架构模式如MVC、MVVM和MVP是解决软件结构问题的通用方案。。每种模式有其优缺点,适用场景不同。

0 架构设计和模型

架构模式是针对特定上下文中软件架构中反复出现的问题的通用、可重用的解决方案。

架构模式解决了软件工程中的无数挑战,例如计算机硬件性能限制、高可用性和降低业务风险。

一些常见的体系结构模式包括(MVC)模型-视图-控制器模式、(MVVM)模型-视图-视图-模型、(MVP)客户端-服务器模式、分层模式等。

MVC将应用分为模型、视图和控制器,分离关注点,利于测试和开发,但复杂性可能导致脆弱性。
MVP强化了MVC的视图和控制器,适合复杂UI。
而MVVM强调数据绑定,适合大型应用,尤其适用于需要双向数据同步的场景。

Toroid托瑞德符号.png

1 定义 MVC模式

MVC架构是Model、View、Controller的缩写,它是把一个应用的输入、处理、输出流程
按照Model、View、Controller的方式进行分离,即应用可被分成三层:模型层、视图层和控制层。
1979年,计算机科学家发明了MVC模式设计。

该模式试图设计一种方法,将大型用户应用程序分解为更小、更易于管理的组件。

MVC模式最初用于Small Talk编程语言。模型-视图-编辑器是模式的初始名称之一,但它已更改为模型-视图-控制器。MVC 模式在整个 1980 年代和 1990 年代初广泛用于桌面应用程序。它在 1990 年代后期开始广泛流行。

模型视图控制器是一种体系结构模式,有助于开发可以轻松开发、测试和维护的应用程序。

模型视图表示器设计模式将控制器替换为表示器,后者在更新视图时操作模型。表示器在 MVVM 设计模式中包含业务逻辑,而视图和模型是隔离的。

模型视图控制器 (MVC) 是一种体系结构模式,它将应用程序的表示层和业务逻辑层分离。它包含三个组件:模型、视图和控制器。模型表示应用程序的数据,视图显示数据,控制器在数据更改时更新视图。
MVC 模式的主要目标是分离关注点以简化可测试性

image.png

3 MTV模式

在MTV 的解释中,“视图”描述了呈现给用户的数据。数据看起来怎么样并不重要,重要的是哪些数据被呈现。该视图描述了 用户看到了哪些数据,而不是 用户怎么看到数据。这是一个微妙的区别。

所以,在MTV 里,一个"视图(view)"是针对一个特定 URL的回调函数,此回调函数描述了需要展示的数据。

此外,将内容和展示效果分开是很明智的,展示效果就是模板。在MTV 里,一个视图(view)描述了哪些数据会被展示,但是一个视图通常代表了一个模板,这个模板描述了数据是如何被展示的。

那控制器(Controller)在什么位置?在MTV 中,控制器可能指的是框架本身,框架会根据MTV 的 URL 配置,将请求分发到适当的视图(view)。

如果你想要首字母缩写, 则是一个 "MTV " 框架--即 "模型(Model) "、 "模板(Template)" 和 "视图(View). 这种划分更有意义。

归根结底,还是要把事情做好。而且,不管事物怎么命名,MTV 也能以一种最符合某些场景逻辑的方式来完成事情。

4 模式对比 MVP & MVVM

  • MVP (Model—View—Presenter)

演示者模式:MVP(Model—View—Presenter)模式中也有三个组件。
这些是模型、视图和演示者。演示器替换 MVP 设计模式中的控制器(在 MVC 中)。

MVP 模式允许更轻松地模拟视图和更高效的应用程序单元测试。
在 MVP 模式中,表示器在更新视图的同时操作模型。

当应用程序必须支持多种用户界面技术时,MVP 设计模式比 MVC 模式更适合。
如果您的用户界面很复杂并且需要大量用户交互,这也是一个不错的选择。

与传统的 MVC 设计相比,MVP 设计模式更适合对应用的用户界面进行自动单元测试。

  • ModelView-ViewModel(MVVM)

ModelView-ViewModel (MVVM) 设计模式是 Martin Fowler 的表示模型设计范式的变体,它建立在流行的 MVC 模式之上。

视图模型有助于分离表示层。表示器包含 MVVM 设计模式中的业务逻辑,并且视图与模型隔离。

视图组件知道表示器,即使表示器忘记视图也是如此。演示器表示用户界面的抽象视图。

被动视图不了解模型。该视图在 MVVM 设计模式中处于活动状态,包括操作、事件和数据绑定信息。

在 MVVM 中,视图不维护状态信息;相反,它与视图模型同步。在 MVVM 中,ViewModel 隔离表示层,并提供用于管理视图状态和操作模型的方法和命令。

MVVM 设计模式中的视图和视图模型使用方法、属性和事件进行通信。

视图和视图模型具有双向数据绑定或双向数据绑定,这保证了视图模型的模型和属性与视图同步。在需要双向数据绑定的应用程序中,MVVM 设计模式是理想的选择。

总体而言,MVVM没有界面,适合大型的安卓平台的应用,核心测试在框架内完成,层的维护性很好,而MVP没有这些特点。 另外MVVM适合单个模型映射多个视图,MVP的演示者和视图通常是一对一的关系。

image.png

5 优点和弱点简介

MVC类架构优点:

将关注点清晰地分离
使测试应用程序代码变得更加容易
加速并行开发
促进应用程序层的解耦
促进更好的代码组织、可扩展性和重用

MVC架构的弱点主要表现在:

(1)MVC架构的复杂性带来脆弱性。

MVC架构增加了系统结构和实现的复杂性。比如说一个简单的界面,如果严格遵循MVC方式,使得模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

(2)视图与控制器间紧密连接的脆弱性。

视图与控制器是相互分离但却是联系紧密的部件。
没有控制器的存在,视图应用是很有限的。反之亦然,这样就妨碍了它们的独立重用。

(3)视图对模型数据的低效率访问的脆弱性。

依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。

对未变化数据的不必要的频繁访问也将损害操作性能。

可以说,MVC架构的脆弱性主要表现在缺少对调用者进行安全验证的方式和数据传输不够安全等两个方面。

这些不足也是导致MVC存在比较大的脆弱性、容易招致攻击的主要原因。

(4) 实现相对复杂

对于小型应用来说,MVC不是一个好的选择。

6 小结

这里简单对比架构模式和设计模式的区别,架构模式处理系统的主要组件如何协同工作、消息和数据流经系统以及其他结构注意事项。

体系结构模式使用多种组件类型,每种组件类型通常由较小的模块组成。

架构模式是针对特定上下文中软件架构中反复出现的问题的通用、可重用的解决方案。

设计模式是软件应用程序中经常遇到的问题的推荐解决方案和实践。

架构模式处理应用程序的整体结构,而设计模式则关注如何构建程序中的组件。

目录
相关文章
|
9月前
|
存储 设计模式 前端开发
QTChart实现柱状图的mvc模型
QTChart实现柱状图的mvc模型
100 1
|
1月前
|
设计模式 存储 前端开发
MVC(模型-视图-控制器)是一种在Web应用程序开发中广泛使用的软件设计模式
【5月更文挑战第12天】MVC模式是Web应用开发中的常见设计模式,将逻辑、数据和界面分离,提升代码可维护性和重用性。模型处理数据逻辑,视图展示数据,控制器协调用户输入与模型视图交互。优点包括代码分离、易维护、可扩展和组件重用,促进高效灵活的开发。
27 2
|
22天前
|
JSON 前端开发 Java
Spring第四课,MVC终章,应用分层的好处,总结
Spring第四课,MVC终章,应用分层的好处,总结
|
8天前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
1月前
|
前端开发 Java PHP
信息系统架构模型(1) MVC
信息系统架构模型(1) MVC
35 0
|
1月前
|
设计模式 前端开发 数据处理
MVC架构中,控制器和模型之间是如何交互的
MVC架构中,控制器和模型之间是如何交互的
27 0
|
1月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
1月前
|
前端开发 JavaScript Java
让你了解什么是spring MVC模型数据(附大量代码)
让你了解什么是spring MVC模型数据(附大量代码)
49 0
|
9月前
|
前端开发
MVC模型
MVC模型
38 0
|
11月前
|
开发框架 前端开发 安全
ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础
ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础
102 0

热门文章

最新文章