目录
MVVM对比
DDU
数据消费者UI
数据的转换者:Domain Layer
数据图生产者/提供者 DataLayer
遵循原理:
单一数据流:
Android官方推荐架构:DDU
MVVM对比
M:Model 网络层 用于获取远端数据
VM:ViewModel 中间转换层 获取网络层数据进行转换成UI可以直接使用的数据
V:VM提供数据,V负责展示,VM中通过提供可被观察的数据流(Flow或者LiveData)来实现V层被动更新,不需要手动调用VM获取数据
DDU
数据消费者UI
UI layer,对应于MVVM的V层用于展示数据
UIElements:界面元素 通过View/Compose实现的界面树
UIState:界面数据状态 通过包装界面控件属性值来驱动UI改变
数据的转换者:Domain Layer
用于对数据进行处理转换的,用户的不同操作对应不同的逻辑,将逻辑封装。
V层下发交互,Domain层解析交互操作 并通知Data Layer进行更新本地数据 DomainLayer可以放在VM中 。 涉及到对界面逻辑的操作放在此处,但不应该过度关心界面(如context),涉及到对界面状态的操作时应放在UI层,通过包装状态类来降低UI层复杂度
借由ViewModel来实现配置发生变化引起重建的转换 一样也通过LiveData包装可被观察的数据流,Domain Layer层可直接改变也可以放到DataLayer中去处理(根据业务逻辑选择)
数据图生产者/提供者 DataLayer
整合用户需要的备份内存数据操作及请求远端网络数据这两个数据层, DomainLayer层下发数据操作,DataLayer做出响应并更新DomainLayer中被观察的数据对象,实现UI层的自动渲染。
遵循原理:
单一数据流:
- 当数据不仅仅是通过界面交互操作产生的时候数据操作应该下沉到DomainLayer中或者Data层
- 方便测试,不和UI层逻辑强绑定,测试只需更新一处数据即可响应
- 方便回溯,根据使用的被包装容器可对实现不同的数据回溯操作(只需接受最新状态/每个状态都不应该被丢弃)
原文:DDU框架学习之路 - 掘金 (juejin.cn)