学习扔物线进阶视频课程笔记。Android架构

主流的架构有MVC、MVP、MVVM、MVI

架构最主要的一个思想是【拆】,把项目拆的足够分散,降低耦合。

MVC和MVP

MVC:Model View Controller。
MVP:Model View Presenter。
MVC和MVP基本理念都是一样的,把项目拆分成Model层+View层+中间层,其中Model层负责存取数据,View层负责界面展示以及和用户的交互,中间层负责处理Model层和View层的交互,这么拆的目的是让结构清晰,代码解耦,如果不引入架构思想,所有的事都在activity里面做,当项目功能越来越多,代码越来越复杂后,就会显得很乱,而且activity里面的代码也会越发膨胀,不方面管理和扩展功能。如果从activity中抽象出一个Model层后,这时activity负责view层和中间层,这时有两种拆法,如果将View的工作拆到另外的类中,activity只负责中间层的功能,称为Controller,这种实现称为MVC;如果将中间层的工作拆到Presenter类中,activity只负责View的工作,这种实现称为MVP。
网上大多数文章对MVC的讲解不全面,没有把View从avtivity中拆出来,导致activity中既有View,又有Controller,然后还说这是MVC的缺点,耦合度太高,其实不是架构的问题,而是没有拆完全。

MVVM

MVVM:Model View ViewModel。
MVVM是MVP+数据绑定,中间层称为ViewModel,并且ViewModel层和View层实现了数据的双向绑定。
数据绑定是什么?首先可以把数据分为三类,外部数据,内存数据,表现数据。外部数据指数据库数据、文件数据、网络数据等;内存数据指Java代码中的变量;表现数据指界面中展示的数据。数据绑定是指表现数据和内存数据互相自动更新,一个改变了,另外一个跟着改变,另外有时候还可以将内存数据和数据库数据做关联监听,让三种数据进一步联动。

数据绑定功能可以自己实现,也可以使用Jetpack的Databinding库。

Jetpack的ViewModel库和MVVM没有相关性,ViewModel库的作用是,当屏幕发生旋转导致activity重建,ViewModel用来做数据存储的。当然实际开发中ViewModel也会和Dadabinding一起使用。

MVI

MVI:Model View Intent。
MVI的思想是靠数据来驱动页面,Model主要指UI状态,View和其他架构一样,还是负责页面展示,Intent不是activity跳转时的Intent,而是用户的任何操作,都会被包装成Intent发送给Model进行数据处理。交互图如下:

MVI思想和Compose这种声明式UI比较契合,所有的View都是根据不同的数据有不同状态,不同状态显示不同效果。