编写软件可能很复杂。
在构建你的副项目时,你可能不需要想太多,但实际用的软件就不同了。
这可能需要多个组件,如果这些组件处理不当,都可能引发混乱。
但并不需要这么复杂。在今天的文章中,我们将深入了解软件架构模式的世界,并探讨如何将你的软件分为三个简单的部分,每个部分专注于相关任务。
此处省略内容
建筑模式每次谈到软件设计中的架构模式时,最先出现在名单上的包括客户端-服务器、分层、单体式架构、微内核架构、事件驱动架构等。这些模式关注的是整个系统架构,包括各种应用程序、服务、服务器等。
不过,MVP、MVC 和 MVVM 通过将数据、用户界面和逻辑分离来组织单个应用内的代码。它们是架构模式中的一部分,专注于整个系统的架构。
……
MVC、MVP 和 MVVM为了确保博客的可读性和不超过字数要求,我们只讨论组织单个应用程序内部代码的特定架构模式,如下所示:
- 模型-视图-控制器
- 模型-视图-演示器
- 模型-视图-视图模型
显然,这三个模型都有固定的组件,即模型(Model)和视图(View)。我们先详细讨论这两个组件,接下来再分别看看每一架构(Architecture)。
模型。
模型包含软件中所有与数据相关的代码。它是数据库和网络层与应用程序其他部分沟通的桥梁。其主要职责有:
- 处理数据和业务逻辑。
- 封装应用程序的数据以及访问这些数据的规则。
- 处理数据结构的定义。
- 对数据执行 CRUD(创建、读取、更新和删除)操作,即对数据进行增删改查。
查看页面
视图实际上是你的应用程序的前端界面,或用户可以看见和互动的所有部分。它也被称为你的应用程序的用户界面(UI)。它的职责包括:
- 处理非业务逻辑及纯粹的展示逻辑。
- 展示其他层提供的数据给用户。
- 接收用户输入并传递给其他层。
- 可能直接与模型层通信。
了解了这些之后,咱们来看看具体的架构模式。
采用MVC模式,控制器层负责与模型层和视图层通信。
主要职责包括:
- 通过模型层来操作数据。
- 从视图层接收来自用户界面的指令。
- 根据控制逻辑来更新视图。
虽然视图层不能直接和模型层互动,但它能收到数据变化带来的更新。因此,这三层在某种程度上是相互关联的,控制器是主要部分。
模型-视图-表示器 (MVP) 架构设计注:此处“Presenter”为音译,常用于英文技术文献中。
在这种情况下,Presenter 层担任了“中间人”的角色,负责传递 Model 层和 View 层之间的所有通信。Model 层和 View 层之间没有任何直接联系。
它的职责有:
- 根据用户操作更新UI(用户界面)或视图层。
- 依据代码逻辑更新数据或模型层。
- 处理许多通常由MVC模式中的控制器处理的业务逻辑。
MVVM 架构简介
这种架构乍一看起来几乎与MVP架构类似。不过它们之间还是有一些关键的不同之处:
- 多个视图可以映射到同一个ViewModel层上。
- 它在ViewModel层和View层之间使用数据绑定,使得架构更加事件驱动。
- 在这个架构中,没有用户界面的概念。View层表示的是用户的操作,而不是界面本身。
方面 | MVC | MVP | MVVM |
---|---|---|---|
全名 | 模型-视图-控制器 | 模型-视图-呈现者 | 模型-视图-视图模型 |
关注点分离 | 基础 | 更好 | 最好 |
可测试性 | 困难 | 良好 | 最好 |
维护性 | 较难 | 容易 | 容易 |
学习曲线 | 容易 | 容易 | 更难 |
性能 | 可能因紧密耦合而较慢 | 松散耦合下性能更好 | 整体性能平滑,尤其是对于复杂的 UI |
数据流 | 双向 | 单向 | 单向数据绑定 |
视图-逻辑关系 | 多对一 | 一对一 | 多对一 |
UI 更新 | 控制器更新视图 | 呈现者更新视图 | 视图模型通过数据绑定更新视图 |
对 UI 框架的依赖 | 高 | 低 | 低或无 |
可扩展性 | 适合小型项目 | 适用于简单和复杂项目 | 适用于大型数据密集型应用 |
但是你可能会问,哪一种最受欢迎?这三种架构都非常流行。采用这些不同架构的公司有:
- MVC: StackOverflow, GoDaddy, Dell网站
- MVP: Google(某些Android应用的开发者)
- MVVM: Apple(某些使用SwiftUI的iOS应用程序),Angular和Vue.js框架
此外,许多公司根据每个项目或产品的具体需求,使用这些架构的混合。架构的选择通常取决于诸如应用程序的复杂性,开发团队的专业知识,以及项目的具体需求等多方面因素。
结束语
本文介绍了架构模式的基本概念,从整体架构的设计开始,到如何将单一的应用程序进一步划分为三个主要组件,以实现更好的管理和提高可扩展性。
- MVC 由于其简单直接的方式,在 Web 应用中仍然很受欢迎。
- MVP 在 MVC 的基础上进行改进,提供了更好的测试性和更清晰的关注分离。
- MVVM,这三个中最新的一个,在现代应用程序开发中获得了很大的采用。
在它们之间并没有明显的胜者,每个模式都有独特的优势,适用于各种项目和开发场景。随着软件开发领域的发展变化,我们可能会看到这些模式进一步优化,或者全新的架构出现。
想了解更多关于文中讨论的架构模式吗?这里有一些我觉得很有帮助的参考文献: