打赏

android mvc mvp mvvm

一.MVC

MVC是Model-View-Controller的缩写,从字面意思可以拆分成如下结构:

  • Model 模型:
    封装了业务逻辑相关的数据以及处理方法

  • View 视图:
    用于渲染页面,(对应了布局以及各类控件)

  • Controller 控制器:
    用于连接View和Model,处理流程以及页面之间的逻辑(对应了Activity及Fragment)

MVC的特点

它将数据、视图、控制分开,实现了松耦合。

  • View将事件传递到Controller中
  • Controller完成想要业务后改变Model状态
  • Model更新View
MVC的优点
  1. 实现了解耦合,修改其中一层时,不用修改另外两层代码
  2. 可维护性高,松耦合也就意味着维护起来更加方便
  3. 重用性高
MVC的缺点
  1. 由于控件的数据绑定都需要在Activity中完成,Activity/Fragment在View与Controller的定义中有点模糊。
  2. 伴随着业务的增加,Controller容易变得臃肿。

 

二.MVP

 

 

 

MVP(Model-View-Presenter)是MVC的改良模式。与MVP一样,实现了视图、模型、控制的解耦,重点是改变的通信方式。

角色说明
Model 主要做一些数据处理, 网路请求。Presenter 需要通过 Model 层存取、获取数据,Model是封装了数据库 Dao 层或者网络获取数据的角色,或者两种数据获取方式的集合。
Presenter 交互中间人,核心逻辑,处理 View 的业务逻辑,沟通 View 和 Model 的桥梁,Presenter 持有的 View、Model 引用都是抽象,它从 Model 层检索数据后返回给 View 层,使得 View 和 Model 没有耦合,也将业务逻辑从 View 层抽取出来,经常会执行耗时操作。
View 用户界面,Activity、Fragment 或者某个 View 控件,含有一个 Presenter 成员变量,通常 View 层需要实现一个逻辑接口,将 View 上的操作通过会转交给 Presenter 进行实现,最后 Presenter 调用 View 逻辑接口将结果返回给 View 元素。
MVP的特点
  • View接受事件,传递给Presenter
  • Presenter做逻辑处理,修改Model
  • Model通知Presenter数据变化,Presenter更新View
MVP的优点
  1. 将Model与View完全分隔,提高了可扩展性。
  2. 便于测试。在测试Presenter时,只要实现View的接口并注入到Presenter就可以测试Presenter的业务逻辑。
MVP的缺点
  1. 与MVC一样,P层起到的控制功能伴随着业务的增多,也会变得臃肿。
  2. Presneter需要持有View的引用,同时View也需要持有Presenter的引用,控制上存在一定复杂度。

三.MVVM

MVVM实现了数据与UI的双重绑定,其中DataBinding是实现MVVM的关键工具。

  • Model
    与MVC和MVP一样,Model层保存了业务数据与处理方法
  • View
    对应Activity以及XML,但是比起MVC与MVP框架中的View层,更加简洁
  • ViewModel
    负责实现View与Model的交互,将两者分离
MVVM
MVVM的特点
  1. View接受事件,转交给ViewModel
  2. ViewModel操作Model更新数据
  3. Model更新后通知ViewModel,ViewModel更新View数据
MVVM的优点
  1. 低耦合。由于ViewModel的存在,View可以独立于Model变化与修改;同理,Model也可以独立于View变化与修改。
  2. 可重用性。一个ViewModel可被多个View重复绑定,实现同一组业务。
  3. ViewModel中解决了MVP中V-P互相持有引用的问题,使得结构更清晰,简洁
MVVM的缺点
  1. ViewModel持有Model的依赖。
  2. 数据绑定方式使得bug难以确定是在View中还是在Model中。



posted @   YY2000  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示