【各种问题处理】MVC、MVP、MVVM 、MVI、VIPER 架构(设计模式)

简介: 【1月更文挑战第13天】【各种问题处理】MVC、MVP、MVVM 、MVI、VIPER 架构(设计模式)

MVC(Model-View-Controller)
MVC 的三大组成部分:模型、视图和控制器。

image.png

Model:模型层,对接数据库,包含所有数据逻辑的后端,数据存储的位置。模型将数据层与应用程序隔离。
View:视图层,“前端或图形用户界面 (GUI)”视图仅包含如何更新自身,创建模型并将其显示给用户的业务。可以有多个视图对不同的平台使用相同的控制器,因为视图不包含任何与应用程序相关的逻辑。控制器必须更新模型才能更新视图。
Controller:控制层,操作 Model 获取/处理数据。满足用户的输入,并根据用户的输入对模型进行更改。它还管理整个流程并做出有关 UI 的决策。控制器对 View 一无所知,但 View 知道控制器。一个控制器可由多个视图使用。
在 MVC 中,Model 获得数据后,通知 View 去更新数据。View 既是展示页面,又要处理展示的数据,耦合度高。理想情况中,View 层只做展示,这样就要把处理数据的功能拿出去,给 Controller 层,因为 Controller 多了向 View 层提供数据的功能,改名叫 Presenter 以示区分。这就是 MVP 架构。

MVP (Model-View-Presenter)

Model:操作,处理数据。
View:用户界面。
Presenter:操作 Model 处理数据,获得数据提供给 View。
MVP 是很好的架构,很多项目都在使用 MVP 架构。但是因为 Presenter 做为 View 和 Model 中间的桥梁,沟通两边,工作量很大,逻辑非常负载,当 View 交互多时,就会有非常多接口,写起来麻烦。

    对 Presenter 层继续改动,改为 ViewModel 层。就得到了 MVVM 架构。MVVM 与 MVP 的区别是,将 View 与 Model 进行了绑定,这样 View 需要更新数据时,就不需要很多的接口,因为和 Model 绑定了。

MVVM (Model-View-ViewModel)

Model:操作,处理数据。
View:用户界面。
ViewModel:将 View 与 Model 进行双向绑定(这就是ViewModel名字的由来)。
MVVM 看起来很好,理论上简化了接口。但是实际中,交互少时,用 MVVM 给人一种大材小用的感觉:用 MVP 也没有太多的“额外”工作;交互多时,因为引入 DataBinding,内存开销很大。继续针对数据做改动,出现了 MVI。

MVI (Model-View-Intent)

Model:操作,处理数据。
View:用户界面。
Intent:并不是 Activity 中的 Intent,而一种新的用户操作封装。
MVI强调数据的单向流动,主要分为以下几步:

用户操作以Intent的形式通知Model
Model基于Intent更新State
View接收到State变化刷新UI。
数据永远在一个环形结构中单向流动,不能反向流动:

VIPER (View-Interactor-Presenter-Entity-Router)

View:展示演示者提供的数据,不执行任何其他操作。
Interactor:我们可以说它充当 MVVM 设计模式中的 VM。它是应用程序中我们称之为Bussines Logic的部分。此处不执行 UI 操作。获取,更新等操作在此处进行。
Presenter:视图和交互器之间的桥梁。此层不应包含 UI 或总线逻辑操作。
Entity:应用程序的模型部分。可在此处找到与应用程序相关的数据模型。这部分只与交互器合作。
Router:此层是允许我们确定何时显示应用程序页面的层。

相关文章
|
8月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
1676 1
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
448 4
|
存储 前端开发 调度
Flux 与传统的 MVC 架构模式区别
Flux是一种用于构建用户界面的架构模式,与传统的MVC架构不同,它采用单向数据流,通过Dispatcher统一管理数据的分发,Store负责存储数据和业务逻辑,View只负责展示数据,使得应用状态更加可预测和易于维护。
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
存储 前端开发 测试技术
MVC、MVP、MVVM 模式
MVC、MVP 和 MVVM 是三种常见的软件架构模式,用于分离用户界面和业务逻辑。MVC(Model-View-Controller)通过模型、视图和控制器分离数据、界面和控制逻辑;MVP(Model-View-Presenter)将控制逻辑移到 Presenter 中,减少视图的负担;MVVM(Model-View-ViewModel)通过数据绑定机制进一步解耦视图和模型,提高代码的可维护性和测试性。
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
279 3
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
433 2
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
578 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
774 0