继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

初学者必看:MVC、MVP和MVVM架构模式详解

慕莱坞森
关注TA
已关注
手记 299
粉丝 36
获赞 146

编写软件可能很复杂。

在构建你的副项目时,你可能不需要想太多,但实际用的软件就不同了。

这可能需要多个组件,如果这些组件处理不当,都可能引发混乱。

但并不需要这么复杂。在今天的文章中,我们将深入了解软件架构模式的世界,并探讨如何将你的软件分为三个简单的部分,每个部分专注于相关任务。

此处省略内容

建筑模式

每次谈到软件设计中的架构模式时,最先出现在名单上的包括客户端-服务器、分层、单体式架构、微内核架构、事件驱动架构等。这些模式关注的是整个系统架构,包括各种应用程序、服务、服务器等。

不过,MVP、MVC 和 MVVM 通过将数据、用户界面和逻辑分离来组织单个应用内的代码。它们是架构模式中的一部分,专注于整个系统的架构。

客户端-服务器架构 vs MVC

……

MVC、MVP 和 MVVM

为了确保博客的可读性和不超过字数要求,我们只讨论组织单个应用程序内部代码的特定架构模式,如下所示:

  1. 模型-视图-控制器
  2. 模型-视图-演示器
  3. 模型-视图-视图模型

显然,这三个模型都有固定的组件,即模型(Model)和视图(View)。我们先详细讨论这两个组件,接下来再分别看看每一架构(Architecture)。

模型。

模型包含软件中所有与数据相关的代码。它是数据库和网络层与应用程序其他部分沟通的桥梁。其主要职责有:

  1. 处理数据和业务逻辑。
  2. 封装应用程序的数据以及访问这些数据的规则。
  3. 处理数据结构的定义。
  4. 对数据执行 CRUD(创建、读取、更新和删除)操作,即对数据进行增删改查。

模型层是如何工作的

查看页面

视图实际上是你的应用程序的前端界面,或用户可以看见和互动的所有部分。它也被称为你的应用程序的用户界面(UI)。它的职责包括:

  1. 处理非业务逻辑及纯粹的展示逻辑。
  2. 展示其他层提供的数据给用户。
  3. 接收用户输入并传递给其他层。
  4. 可能直接与模型层通信。
模视图-控制器(MVC)架构

模型-视图-控制器架构

了解了这些之后,咱们来看看具体的架构模式。

采用MVC模式,控制器层负责与模型层和视图层通信。

主要职责包括:

  1. 通过模型层来操作数据。
  2. 从视图层接收来自用户界面的指令。
  3. 根据控制逻辑来更新视图。

虽然视图层不能直接和模型层互动,但它能收到数据变化带来的更新。因此,这三层在某种程度上是相互关联的,控制器是主要部分。

模型-视图-表示器 (MVP) 架构设计

注:此处“Presenter”为音译,常用于英文技术文献中。

模型视图Presenter架构图

在这种情况下,Presenter 层担任了“中间人”的角色,负责传递 Model 层和 View 层之间的所有通信。Model 层和 View 层之间没有任何直接联系。

它的职责有:

  1. 根据用户操作更新UI(用户界面)或视图层。
  2. 依据代码逻辑更新数据或模型层。
  3. 处理许多通常由MVC模式中的控制器处理的业务逻辑。

MVVM 架构简介

MVVM 架构

这种架构乍一看起来几乎与MVP架构类似。不过它们之间还是有一些关键的不同之处:

  1. 多个视图可以映射到同一个ViewModel层上。
  2. 它在ViewModel层和View层之间使用数据绑定,使得架构更加事件驱动。
  3. 在这个架构中,没有用户界面的概念。View层表示的是用户的操作,而不是界面本身。
并列比较
方面 MVC MVP MVVM
全名 模型-视图-控制器 模型-视图-呈现者 模型-视图-视图模型
关注点分离 基础 更好 最好
可测试性 困难 良好 最好
维护性 较难 容易 容易
学习曲线 容易 容易 更难
性能 可能因紧密耦合而较慢 松散耦合下性能更好 整体性能平滑,尤其是对于复杂的 UI
数据流 双向 单向 单向数据绑定
视图-逻辑关系 多对一 一对一 多对一
UI 更新 控制器更新视图 呈现者更新视图 视图模型通过数据绑定更新视图
对 UI 框架的依赖 低或无
可扩展性 适合小型项目 适用于简单和复杂项目 适用于大型数据密集型应用

但是你可能会问,哪一种最受欢迎?这三种架构都非常流行。采用这些不同架构的公司有:

  1. MVC: StackOverflow, GoDaddy, Dell网站
  2. MVP: Google(某些Android应用的开发者)
  3. MVVM: Apple(某些使用SwiftUI的iOS应用程序),Angular和Vue.js框架

此外,许多公司根据每个项目或产品的具体需求,使用这些架构的混合。架构的选择通常取决于诸如应用程序的复杂性,开发团队的专业知识,以及项目的具体需求等多方面因素。


结束语

本文介绍了架构模式的基本概念,从整体架构的设计开始,到如何将单一的应用程序进一步划分为三个主要组件,以实现更好的管理和提高可扩展性。

  • MVC 由于其简单直接的方式,在 Web 应用中仍然很受欢迎。
  • MVP 在 MVC 的基础上进行改进,提供了更好的测试性和更清晰的关注分离。
  • MVVM,这三个中最新的一个,在现代应用程序开发中获得了很大的采用。

在它们之间并没有明显的胜者,每个模式都有独特的优势,适用于各种项目和开发场景。随着软件开发领域的发展变化,我们可能会看到这些模式进一步优化,或者全新的架构出现。

想了解更多关于文中讨论的架构模式吗?这里有一些我觉得很有帮助的参考文献:

  1. <https://www.geeksforgeeks.org/Android 架构模式/>
  2. https://www.masaischool.com/blog/比较软件架构模式的博客/
  3. https://www.apptension.com/blog-posts/MVC-vs-MVVM-vs-MVP
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP