【各种问题处理】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:此层是允许我们确定何时显示应用程序页面的层。

相关文章
|
7月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
376 1
|
7月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
404 0
|
11月前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
12月前
|
Android开发 开发者 Kotlin
Android实战经验之Kotlin中快速实现MVI架构
MVI架构通过单向数据流和不可变状态,提供了一种清晰、可预测的状态管理方式。在Kotlin中实现MVI架构,不仅提高了代码的可维护性和可测试性,还能更好地应对复杂的UI交互和状态管理。通过本文的介绍,希望开发者能够掌握MVI架构的核心思想,并在实际项目中灵活应用。
558 8
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
614 12
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
395 12
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
973 37
|
设计模式 API 持续交付
深入理解微服务架构:设计模式与实践
【10月更文挑战第19天】介绍了微服务架构的核心概念、设计模式及最佳实践。文章详细探讨了微服务的独立性、轻量级通信和业务能力,并介绍了聚合器、链式和发布/订阅等设计模式。同时,文章还分享了实施微服务的最佳实践,如定义清晰的服务边界、使用API网关和服务发现机制,以及面临的挑战和职业心得。
|
前端开发
MVVM是什么?和MVC有何区别呢?
【10月更文挑战第11天】MVVM 和 MVC 都是为了更好地组织和管理软件架构,提高开发效率和代码质量。理解它们的特点和区别,有助于我们在实际开发中做出更合适的选择,并构建出更加优秀的应用程序。
|
存储 前端开发 测试技术
MVC、MVP、MVVM 模式
MVC、MVP 和 MVVM 是三种常见的软件架构模式,用于分离用户界面和业务逻辑。MVC(Model-View-Controller)通过模型、视图和控制器分离数据、界面和控制逻辑;MVP(Model-View-Presenter)将控制逻辑移到 Presenter 中,减少视图的负担;MVVM(Model-View-ViewModel)通过数据绑定机制进一步解耦视图和模型,提高代码的可维护性和测试性。

热门文章

最新文章