MVC、MVP、MVVM
- 功能模块化 —— 内部高聚合、模块功能低耦合
- 提高开发效率——视图显示、业务处理、数据处理
- 提高测试效率——方便测试、定位问题
MVC
- M(Model) ——模型层——业务逻辑/数据存储 ——外观类/接口访问
- V(View) ——视图层——展示洁面/接收输入 ——XML/Activity
- C(Controller)——控制层——业务逻辑/连接M&C——Activity
1.- UI 变化操作 -
2.需修改model的数据➡️ 2.通知修改➡️
用户输入—— —— ——View —— —— —— —— ——Controller—— —— —— —— ——Model
⬅️修改通知 ⬅️需修改的UI
2. --- 直接通知修改Model层的数据 ---
描述:
1.view 接收用户的输入
2.需UI变化操作(不涉及业务的调用)即可直接与Controller交互即可
3.需要修改Model数据,即需要通过Controller才能修改的
view层可直接更新Model的数据而不必通过Controller
4.Model层数据发生变化,若需要修改UI,则需要通过Controller对View的通知修改UI
缺点:
1.Activity 责任不分明,十分臃肿
2.Activity 由于生命周期的功能处理承担View层的职责(接收用户操作、加载应用布局),还需承担Controller层的职责
3.随着界面增多和逻辑复杂度提高,Activity的代码量增加,更加臃肿
MVP
解决MVC的Activity臃肿问题,分离了Activity重的View层和Controller层的职责,从而对Activity的代码量进行优化、瘦身,所以出现了MVP
- M(Model) ——模型层——业务逻辑/数据储存——外观类/接口访问
- V (View) ——视图层——View绘制/用户交互——XML/Activity
- P (presenter)——呈现层——业务逻辑/连接M&V——接口
需修改的Model层实例➡️ 通知修改➡️
用户输入—— —— ——View—— —— —— ——Presenter—— —— —— ——Model
⬅️通知修改 ⬅️需修改UI
描述:
1.View层接收用户输入
2.View层与Model交互必须通过Presenter
优点:
1.低耦合,通过Presenter 实现数据和视图层的交互,完全隔离了View和Model层,二者互不干涉
避免了View和Model的直接联系,通过Presenter实现两者沟通
2.Activity代码更加简洁,简化Activity的职责。仅负责UI相关操作,其余复杂的逻辑代码提取到Presenter层
MVVM
为了更加分离Model和View层 ,释放Activity的压力。于是出现了MVVM
- M(Model) ——模型层——业务逻辑/数据储存——外观类/接口访问
- V (View) ——视图层——View绘制/用户交互——XML/Activity
- VM(ViewMode)——View的数据模型和Presenter的结合体
修改Model层➡️ 通知修改➡️
用户输入—— —— ——View—— —— ——DataBinding—— —— ——ViewMode—— —— ——Model
⬅️通知修改 ⬅️需修改UI
优点:
1.View层和Controller层直接耦合程度进一步降低,分离更彻底,减轻了Activity的压力
MVC和MVP的区别
1.层及含义
MVC:V对应的是 布局文件&Activity
MVP:V对应的是Activity,简化了Activity 的职责
2.业务逻辑处理方式
MVC:Controller
MVP:Presenter
3.View与Model的交互
MVC 直接、间接
MVP 必须经过Presenter (完全隔离了View&Model)
4.View与业务逻辑的交互
MVC:Activity(Controller层)
MVP:接口(Presenter层)
三种模式出现的初衷
1.MVC
为解决程序模块化问题,于是MAVC模式出现了,将业务逻辑、数据处理、与界面显示分离出来。即形成了M、V、C层
2.MVP
在MVC模式中,M层和C层还是相互交互,隔离度不够,同时写到Activity使得Activity代码臃肿,于是出现了MVP,隔离了M层和V层直接连接,释放了Activity的压力
3.MVVM
为了更加分离M层和V层,释放Activity的压力,于是出现了MVVM,使得M层和C层的耦合度更加降低,分离了更加彻底,更加减轻了Activity的压力
转自:https://juejin.im/entry/5d632c296fb9a06afc254d58?utm_source=gold_browser_extension
网友评论