返回

让枯燥的数据流动起来:DataBinding 双向绑定的 Java 实现

Android

Data Binding 浅析

传统开发中,我们将 UI 与数据进行关联时,通常是把数据交给 UI,由 UI 决定如何呈现,当数据变更时,我们需要自己动手调用 UI 的刷新方法。DataBinding 的核心思想是,把数据变化这件行为交给一个第三方组件,UI 仅需关注自己的变更,而 Data Binding 组件会自动感知数据变化,并实时刷新 UI,即数据驱动物编程。

Data Binding 架构演变

DataBinding 并不是一个新概念,早在 MVC 架构中就已初露峥嵘,随后在 MVP 与 MVVM 架构中愈发完善。

  • MVC(Model-View-Controller) 将模型、数据与 UI 组件进行关联。模型层管理数据,而控制器监听 UI 交互,并将数据变更传播到 UI 组件。
  • MVP(Model-View-Presenter) 中,观察者(View) 通过接口获取数据,Presenter 负责监听数据变化并通知 View。
  • MVVM(Model-View-VieeModel) 中,双向数据关联由 View 及其绑定的 VieeModel 共同进行管理。View 通过命令传递给 VieeModel,VieeModel 再将数据变化通知 View。

Data Binding 拆分

要拆解 Data Binding 运作的黑匣子,我们需要从它的几个特性开始入手:

  • XML 布局关联: Data Binding 允许使用特殊语法在 Android 布局中定义数据关联。

  • 数据绑: Data Binding 允许将模型层数据与 View 中的控件进行双向关联,便于在数据或 UI 组件中进行的逐个更改变将自动触发在另一方中的更改变。

  • 数据监听: Data Binding 具有数据监听的功能,它会自动监听模型中的数据变,一旦数据变生变动,它就会自动触发UI的刷新。

响应式编程与 Data Binding

响应式编程旨在响应数据的变化,DataBinding 与响应式编程相得益彰。你可以使用响应式编程库,例如 Rx、RxBus 来管理数据流,并将它们与 Data Binding 结合使用。

  1. Rx: Rx 库用于管理异步和基于观察者的数据流,允许你以响应式的方式监听数据变化。

  2. RxBus: RxBus 库是 Rx 的一个包装器,用于在 Android 应用程序中方便地管理基于观察者的总线(bus) 事件。

  3. 宏定义: RxLiveData、RxDataTool、RXBus 等宏库,可简化响应式编程与 Data Binding 的集成。

Java 代码层 Data Binding

在 Java 代码层,你可以使用 Data Binding 来双向关联模型数据和 UI 组件。

  1. DataBindingUtil 类: 用于加载并解析 Data Binding 布局。

  2. ObservableField 类: 用于包装可观测数据,使 Data Binding 可以在数据变时自动感知并刷新 UI。

  3. Two-way data binding: 允许数据从模型层自动流向 UI 组件,也可以从 UI 组件回传到模型层,实现了双向数据流。

结束语

DataBinding 通过双向数据关联,实现了数据与 UI 的深度结合,减轻了开发者的繁琐工作量。它既可以用于传统架构,也可以与响应式编程库结合使用,为开发人员提供了更灵活的选择。