Android为什么要选择MVVM

什么是MVC?

下面是MVC的基本流程图

用户操作
View 视图
Controller 控制器
Model 模型
数据更新
View 更新显示
用户看到结果

下面是MVC的详细流程图

视图层
模型层
控制器层
数据变更通知
业务状态通知
UI展示
用户交互
数据绑定
数据存储
业务规则
数据操作
处理用户输入
业务逻辑处理
调用Model操作
用户交互
View接受事件
View去调用Controller

再来具体看android中的MVC的实现的整个流程

直接操作
用户操作UI
Activity/Fragment
作为Controller
调用Model层
Repository/Data Class
执行业务逻辑
数据更新
Model通知Activity
Activity更新UI
findViewById + setText等

MVC的缺点

Android MVC 实际问题
Activity/Fragment 承担多重角色
Controller 和 View 混合
代码臃肿难维护
紧密耦合
修改困难
测试难度大
直接依赖
View 直接依赖 Model
架构混乱
上帝对象问题

什么是MVP?

下面是一个简单的登录的MVP的流程图

Model
View
Presenter
格式正确
格式错误
成功/失败
onSuccess
onError
执行网络请求
登录API调用
Model
UserManager
通过回调通知Presenter
onSuccess/onError
调用 view.navigateToHome
Presenter处理结果
调用 view.showError
登录失败
处理UI逻辑
验证输入格式
Presenter
比如LoginPresenter
调用 model.login
username, password
调用调用 view.showError
输入格式有误
调用 presenter
View-Activity/Fragment
用户点击登录按钮
View 更新UI
跳转到主页

由上面的图可见,P层起到非常重要的地位,他是一个中间者,起到承上启下的作用,再从这个图里面可以更形象的来说MVP,举个例子说明,老板要做一件事情,他会先跟产品经理说我要做这个XXX事情,产品经理先初步审核一下老板提的需求,如果觉得哪里不对,反馈给老板。老板做出修改,产品经理拿到老板的合理的需求之后,去找程序员,找ui评审,程序员把需求做好,反馈到产品经理这来,产品经理把结果汇总再去跟老板汇报。产品经理就像这个p层,做资源的整合,协调等相关工作。

我们再开看看MVP的缺点是什么?

开发者感受
我只是想显示个数据...
重复机械的劳动
文件数量与代码行数激增
MVP 强制流程
1. 定义View接口
1. View实现接口
3. 创建Presenter
UserPresenter
持有IUserView引用
4. 在View中绑定Presenter
5. 在Presenter中调用View方法
实现一个简单功能的需求
结果: 开发速度变慢

这个流程图展示了一个单向的、强制性的准备工作链条。哪怕业务逻辑非常简单(如显示一条数据),MVP 的架构规则也要求你必须完整地走完每一步:定义接口、实现接口、建立绑定关系。这大量与核心业务无关的样板代码,使得开发过程显得繁琐和臃肿,降低了开发效率。

还有个最大的问题就是所有的内存释放都要手动去处理,在开发中不可避免的会遗漏,就会造成内存泄漏。

什么是MVVM?

那么我们如何将项目中的string文件自动帮我我们生成excel,生成的excel的目的就是为了给产品去翻译。
上面这个截图扫描之后再干什么了?

Interaction Flow
1. 用户交互
(点击、输入等)
2. 执行命令
或处理属性变更
3. 处理完成
更新数据/状态
4. 通知属性变更
(e.g., 通过 INotifyPropertyChanged)
5. 双向数据绑定
ViewModel 视图模型
View 用户界面
Model 数据与业务逻辑
Data Binding

从上面的图可以看出ViewMode是一个中间层
MVVM 通过引入 ViewModel 这一中间层,并利用数据绑定和命令机制,实现了 View 和 Model 的彻底解耦。数据流是双向且自动的:View 的变动自动反映到 ViewModel,ViewModel 的状态变化也自动推送到 View,而 ViewModel 则负责与 Model 进行协调。这个模式极大地提高了前端应用程序的可维护性、可测试性和开发效率。

结合livedata lifecycle 达到生命周期感知能力的架构体现,帮助我们自动回收和释放内存,从而达到性能优化的目的,这边博客不会去细讲怎么通过具体的代码去演示相关操作

其实选择MVVM是架构的进化与演变,其实一个大型项目,是多种架构综合体现一个产物,不能说MVC,MVP一定不好,对于一些较为复杂的项目,我们依然可以以MVVM为主导,mvc或者mvp为辅助,构建出合理的和可维护性的项目。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐