Data-Mediator 核心工作流图
概念
- 数据中介者是一个强大的数据层框架(其实业务交互的一切皆可为数据), 该框架利用编译时注解,插件等技术。解决数据层的维护麻烦的问题。 以及支持强大的特性。
- 数据中介者的核心思想实际上就是代理和中介(两者的思想有类似).
- 代理:
相信大部分人都知道在编程中经常都会用到代理技术,比如AOP动态代理。但是他不具备通用性,需要为特定的对象写对应的封装。(java可以用cglib, android 可以用dexmarker处理), 甚至java还有对应的agent技术(非ClassLoader技术,一般j2ee或者写插件才用),可以在编译时/运行时改变字节码。 - 中介者:
实际上跟我们买房子的中介, 买东西的商店是类似的。 中介者可以减少用户的时间和交互成本。 设想一下如果我们买房子都只找业主,当然会直接点,但是你要跑的流程,手续会很多。还得了解相关的法律知识。 又设想下如果我们买东西都去找生产商或者批发商。 你得跑多远去买东西... . 在程序中有种设计模式就叫中介者模式, 思想实际上是一样的。
- 代理:
- 所以本框架的核心思想:
- 1), 用注解生成模型(data-module),
- 2), 用中介者和数据实现(data-impl), 数据代理(data-proxy)交互。通过通用的回调达到我们想要的目的。
- 3), 绑定器Binder 和 数据绑定的注解 都是基于中介者来实现的。
- 涉及的对象及说明.
- data-module: 数据模型(接口类型), 由手动写的@Fields注解以及intellij插件辅助生成。
- data-impl : 数据模型的实现. 编译时注解生成。
- data-proxy: 数据的代理, 编译时注解生成. 使用时由DataMediator获取。
- data-mediator: 数据中介者,代表对象DataMediator. 由DataMediatorFactory工厂创建生成。
- Proyperty Callback 属性回调。通过DataMediator可注册与反注册,以便监听属性变化。后面的binder和DataBinding 均是基于此。 代表对象DataMediatorCallback.
- Binder 绑定器, 基于DataMediator演化而来的对象,主要是用于数据和ui界面元素的绑定, 达到每次操作数据即是操作ui的效果。原理是基于Proyperty Callback.
- Data-Binding 代表对象DataBinding. 所有需要数据绑定对象的基类。用于协助注解式的数据绑定,可完美搭配butterknife.
特性
- 1, 支持监听属性变化(List, SparseArray 结构同样支持)
- 2, 自动生成get/is/set, hashCode, equals,toString 方法。 并且可以根据flags快速调整. 支持copy等额外接口。
- 3, 支持链式编程
DataMediator<Student> mediator = DataMediatorFactory.createDataMediator(Student.class);
//数据代理层
mediator.getDataProxy()
.setName(null)
.setAge(0)
.setId(0);
//数据真正的模型实现
mediator.getData().setName(null)
.setAge(0)
.setId(0);
复制代码
- 4, 支持Serializable 和 parcelable数据的序列化. 可以根据字段flag调整。
- 5,完整支持Google/Gson注解
- 6, 支持数据绑定, 并且可以完美搭配BukkerKnife.
- 7, 支持对数据模型增加自定义方法和常量,自然支持实现自定义接口。
- 8, 支持数据缓存。
- 9,支持数据模型之间的依赖或继承
- 10,插件支持。
- 'data-mediator-intellij-plugin' 用于生成数据模型接口的方法.
- 'data-mediator-convertor-intellij-plugin' 用于将java bean转化为基本的数据模型.
- android lint 支持.
compile 'com.heaven7.android.data.mediator.lint:dmlint:1.2' 复制代码
学习路径
- 1, 入门篇
- 2, 专题篇
- 3, 源码阅读
相关demo或教程.
- android 实现parcelable. demo
- 完整支持Gson注解.demo
- 属性回调。 详解
- 数据绑定之android.
- 模型实现自定义方法或实现自定义接口. demo
- 模型插件 'data-mediator-intellij-plugin' demo:
- 转换器插件 'data-mediator-convertor-intellij-plugin' demo.
想要体验最新的特性 ?
请到github/data-mediator体验。 如果觉得不错,请star支持下项目哈。