MVC
特点在于 实现关注点分离,即应用程序中的数据模型与业务和展示逻辑进行解耦
用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)
缺点是不适合android客户端,因为Activity的角色不明确,即可以做view层,又可以做Controller层,导致Activity的职责不断增加,以致于Activity变得臃肿
MVP
特点:P层分别与M层,V层之间双向通信
View与Model之间不通信,需要通过Presenter传递。P层完全把M层,V层都隔离开了,大部分逻辑都会在Presenter层中
View会非常薄,不部署任何的业务逻辑,称为 被动视图
P层通过定义接口的方式进行交互,方便单元测试
缺点:P层没法感知生命周期,导致出现页面销毁了都还在网络请求的问题,容易出现内存泄漏和异常,不过可以接入Lifecycle来获取到生命周期
MVVM:
特点:
ViewModel与Presenter大致相同,都是负责处理数据和实现业务逻辑,但ViewModel层没有直接或者间接地持有View层的任何引用
MVVM的本质是数据驱动,利用双向绑定机制,关注点都在于数据上,把解耦做的更彻底
DataBinding实现了View层与ViewModel数据的双向绑定
MVI:
特点:响应式编程范式,面向数据流和变化的申明式编程范式
新版架构指南做的调整:
1.将LiveData组件改成了StateFlow
为了对协程的使用更友好,更能体现面向数据流响应式编程的思想
2.ViewModel传递给View的数据限制为View的UiState
ViewModel从Model层获取数据后,转换为UIState数据,通过StateFlow流向View层,UIState是能直接控制View组件如何显示数据的,UIState就是页面的状态或者View的State
3.单数据流还是多数据流的选择
官方指南并没有强制使用单流
网友评论