提示:学疏才浅,如有错误请各位不吝指教
前言
安卓的架构随着发展不断变更,学习新的框架才能走得更远。
一、MVC
mvc指model、view、controller。model层负责数据管理,典型的例子有网络传输以及各种实体类,而view层和controller层通常是紧密结合的,用户在view层的操作触发controller层的业务逻辑被调用,controller层再将返回的信息显示到view层中,典型的例子有Activity或fragmnet与它所绑定的xml文件。
优点
mvc作为比较传统的代码架构比较成熟,另外架构的模块化程度较高,数据与界面分离降低了耦合性
缺点
在复杂项目当中controller层会变得即为笨重,因为它承载了view以及各种业务逻辑,而相较而言view层和model层都比较轻量级,因此controller层的代码会比较难维护并且可读性低。另外,model层与view层耦合度较高。
二、MVP
mvp指model、view、presenter。model层和view层的职责与mvc的一致,最大的不同在于mvp是以presenter层作为view与model之间的交互层,会从model层中获取需要的数据,然后在view层中显示。另外,mvp中通常有contract接口,主要是用于统一管理view和presenter层的各种方法,它是一个接口,包含view层的接口和presenter层的接口,定义各自所需要的各个接口。view层只管ui,并且view层持有presenter的引用,通过持有的presenter来进行业务逻辑的实现,但不关注业务逻辑的具体细节,model层只管数据(bean/网络);presenter层持有view层与model层的引用,从model层进行数据的更新或者获取,再调用view层的方法去更新ui;model层只对presenter暴露,与view层完全隔离。
优点
相比mvc而言,mvp架构通过presenter层将model层和view层进行了隔离实现了解耦,使得代码的耦合度更低,复用性得以提升。
缺点
mvp框架中增加了contract类,导致代码复杂度提升,另外view层与presenter层的交互较多,导致这两层之间的耦合性较高,维护也会比较麻烦
三、MVVM
指model、view、viewmodel。view层与view层与之前的作用相似。其中,view与viewmodel双向绑定,model层负责管理数据并向viewmodel层传输数据。viewmodel通常需要继承viewmodel类,并且需要与view层的生命周期绑定。一般在viewmodel中会使用livedata/observablefield。
优点
view层与model层完全解耦,降低了耦合度,提高了代码的复用性。双向绑定技术使得设计人员可以专注于view层,而开发人员不需要去关注更新UI的操作,只需要专注于业务逻辑。并且mvvm的代码量更少、更轻量级。
缺点
每个view都绑定了viewmodel会导致内存花费多。
四、MVI
mvi分为界面层、数据层(界面与数据之间的网域层为可选层)。
view层
界面层包括界面元素(view)和界面状态(通常命名为XxState),虽然一般也会使用viewmodel(其中包含state类),但与mvvm架构最大的不同在于并非双向绑定,而是遵循单向数据流的设计模式。用户在界面上操作转给viewmodel,viewmodel中的state改变再传回到界面上显示
网域层
可以是一些复杂业务逻辑或重复使用的简单业务逻辑,通常命名为XxXxUseCase,它们可以被其他各种类使用。它们没有生命周期,而是受限于使用它们的类,如果是livedata则生命周期是隐式处理的,若是用数据流,最好是与协程一起使用,
数据层
由仓库和数据源组成,负责的任务需要包括数据的公开、处理、解决冲突、业务逻辑、以及对其余的数据源进行抽象化处理。通常存诸库类被命名为数据类型+来源类型(Remote/Local)+Repository。需为单一数据源(数据库、网络、文件……)。使用WorkManager来调度后台的操作是推荐的方案,一般调用enqueue、cancel方法。
需要使用到的技术栈:flow数据流、协程、……