Android-应用架构
Android-应用架构
App 架构的核心思想,主要就是为了降低 UI 逻辑和数据业务逻辑之间的耦合度。
MVC模式
MVC 即:Model - View - Controller 模式,Model 与 View、View 与 Controller、Controller 与 Model,都是单向直接通信,View 层负责 UI 逻辑,Model 层负责数据,Controller 负责替 View 层操作 Model 层,但由于 Android 中,Activity 通常会同时担任 View 层和 Controller 层,随着业务变得复杂,Activity 也会越来越臃肿,而且 Activity 与 Model 层交互时,相当于 View 层可以与 Model 层直接交互,没有完全解耦。
MVP模式
MVP 即:Model - View - Presenter 模式,Presenter 与 View、Presenter 与 Model 之间都是双向通信,而 Model 与 View 之间完全没有直接通信,从而彻底解耦。并且由于将 MVC 模式中的 Controller 完全解放成独立的 Presenter,也避免了 Activity 中逻辑代码过多的情况。
MVP 模式的变种:Passive View
Passive View 即:被动 View 层,是 MVP 模式最广泛的一个变种,其核心思想就是:View 层所需的数据,不是由其主动拉取 Presenter 获得的,而是被动地由 Presenter 推送的,在 Android 中,也就是 View 层开放自己被动接受数据的接口,Presenter 在转发 View 层请求数据的逻辑给 Model 后,由 Model 通过 Presenter 来主动调用 View 的接口来回传数据。
MVVM模式
MVVM 即:Model - View - ViewModel 模式,View 仍然对应了 UI 层,Model 仍然是负责主要的数据处理,但一些和 View 层有关的属性及操作则放入了 ViewModel 中实现,其关键在于 DataBinding 技术,View 的变化和 ViewModel 的操作会双向同步,实际上是 Jetpack 框架替开发人员做了一些工作。
DataBinding 原理
DataBinding 会对布局文件中使用
<layout>
标签包裹的元素预处理,会为每个元素增加一个tag
属性,然后将各个元素抽取出来生成一个名为xxxxx-layout.xml
的文件(xxxxx
是原本 xml 布局文件的命名),文件中将原本的所有 View 标签,都转换成了<Target id="xxx" tag="yyy" view="ZzzView">
的形式,其中根布局对应的 tag 是layout
,然后根据原布局文件和新生成的文件,生成一个继承自ViewDataBinding
的类,并将布局文件中的元素,都根据类型和 id 创建成员变量。