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 创建成员变量。