DDU框架学习之路
目录
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)
相关文章:
DDU框架学习之路
目录 MVVM对比 DDU 数据消费者UI 数据的转换者:Domain Layer 数据图生产者/提供者 DataLayer 遵循原理: 单一数据流: Android官方推荐架构:DDU MVVM对比 M:Model 网络层 用于获取远端数据 VM:ViewModel 中间转…...
进阶课6——基于Seq2Seq的开放域生成型聊天机器人的设计和开发流程
情感聊天机器人通常属于开放领域,用户可以与机器人进行各种话题的互动。例如,微软小冰和早期的AnswerBus就是这种类型的聊天机器人。基于检索的开放领域聊天机器人需要大量的语料数据,其开发流程与基于任务型的聊天机器人相似,而基…...
Java面试题04
1.Array 和 ArrayList 有何区别? Array是固定长度的,元素类型可以是基本类型,创建后大小不可改变;ArrayList是可变长 度的,只能存储对象,可以动态添加和删除元素。 区别1: 存储类型不同 …...
海康Visionmaster-通讯管理:使用 Modbus TCP 通讯 协议与流程交互
使用 Modbus TCP 通讯协议与视觉通讯,当地址为 0000 的保持型寄存器(4x 寄存器)变为 1 时,触发视觉流程执行一次,同时视觉将地址为 0000 的寄存器复位(也即写为 0),视觉流程执行完成后,将结果数…...
assimp中如何判断矩阵是否是单位矩阵
对于一个矩阵元素为浮点型的矩阵,你是否还在使每个元素跟1.0f或0.0f进行比较,如果这样,只能说你的结果不一定正确,那我们看看assimp中是如何做的。 template <typename TReal> AI_FORCE_INLINE bool aiMatrix4x4t<TReal…...
大数据Doris(二十):数据导入(Broker Load)介绍
文章目录 数据导入(Broker Load)介绍 一、适用场景...
Docker快速安装kafka
创建zk docker run -d --name zookeeper-server \-e ALLOW_ANONYMOUS_LOGINyes \bitnami/zookeeper:latest创建kafka docker run -d --name kafka-server \-p 9092:9092 \-e ALLOW_PLAINTEXT_LISTENERyes \-e KAFKA_CFG_ZOOKEEPER_CONNECTzookeeper-server:2181 \-e KAFKA_CF…...
ChatGPT是什么?黑客试图淹没其服务
上线2个月,月活跃用户破亿,媒体人用它编辑文案,学生用它写作业,程序员用它编辑代码, 它是谁呢? 它就是火爆全网(chatgpt),chatgpt是什么呢,chatgpt是美国研发的一款人工…...
【Java 进阶篇】Java Web 开发之 Listener 篇:ServletContextListener 使用详解
欢迎大家来到 Java Web 开发的学习之旅!在前面的博客中,我们已经学习了 Servlet、JSP、Filter 等重要的概念和技术。今天,我们将深入探讨 Java Web 开发中另一个重要的组成部分——Listener(监听器),具体来…...
[C/C++]数据结构 链表OJ题:环形链表(如何判断链表是否有环)
题目描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…...
c#流程控制
c#分支语句 namespace ConsoleApp1 {internal class Program{static void Main(string[] args){Console.WriteLine("请输入学生成绩");string sConsole.ReadLine();int aint.Parse(s);//将字符类型强制转换为int类型if (a > 90){ Console.WriteLine("成绩优…...
基于SSM的学生二手书籍交易平台的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
xcode-工程设置
build settings Deployment Postprocessing 用于指定是否在构建完成后进行一些部署相关的处理。 当你在 Xcode 中构建你的应用程序时,构建设置决定了一些行为,其中一项是是否启用 Deployment Postprocessing。这个选项的主要作用是在构建完成后&#…...
Milvus Cloud——LLM Agent 现阶段出现的问题
LLM Agent 现阶段出现的问题 由于一些 LLM(GPT-4)带来了惊人的自然语言理解和生成能力,并且能处理非常复杂的任务,一度让 LLM Agent 成为满足人们对科幻电影所有憧憬的最终答案。但是在实际使用过程中,大家逐渐发现了通…...
百度智能云千帆大模型平台再升级,SDK版本开源发布!
SDK 前言一、SDK的优势二、千帆SDK:快速落地LLM应用三、如何快速上手千帆SDK1、SDK快速启动快速安装平台鉴权如何获取AK/SK以“Chat 对话”为调用示例 2. SDK进阶指引3. 通过Langchain接入千帆SDK为什么选择Langchain 开源社区 前言 百度智能云千帆大模型平台再次升…...
按键精灵中的数据类型转换
按键精灵中的数据类型有:整型、浮点数、布尔类型、字符串、数组这几种类型,主要的转换方式有以下这几种方式: 1. 转布尔类型 CBool Dim A 5 Dim B CBool(A)TracePrint B // true 2. 转字符串类型 CStr Dim MyInteger 437Dim MyStr…...
Golang Gorm 连接数据库
连接数据库 为了连接数据库,你首先要导入数据库驱动程序。例如: import _ "github.com/go-sql-driver/mysql"import ("gorm.io/driver/mysql""gorm.io/gorm" ) GORM 已经包含了一些驱动程序,为了方便的去记住…...
[C++随笔录] 红黑树
红黑树 红黑树的特点红黑树的模拟实现红黑树的底层结构insert的实现实现思路更新黑红比例的逻辑insert的完整代码 insert的验证 源码 红黑树的特点 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是 Red或 Black。…...
C 和 C++ 可变参数介绍
文章目录 前言概念C 的可变参数参数列表 #va_list 4组宏 C 的可变参数参数列表 #va_list 4组宏初始化列表 initializer_list<> 类模板可变参数模板 总结参考资料作者的话 前言 C 和 C 可变参数介绍。 概念 可变(长)/不定(长ÿ…...
【Git】gui图形化界面的使用、ssh协议以及idea集成Git
目录 gui图形化界面的使用 介绍 特点 gui图形的使用 ssh协议 介绍 步骤及概念 ssh协议的使用 配置公钥 idea集成Git idea配置git IDEA安装gitee IDEA中登入Git 编辑 项目分享 克隆分享的项目 编辑 编辑 idea上传远程 gui图形化界面的使用 介绍 GUI(…...
MOD09Q1 vs MOD13Q1怎么选?实测对比两者NDVI结果与处理流程差异
MOD09Q1与MOD13Q1植被指数数据选型指南:从理论到实战的深度解析 在遥感植被监测领域,MODIS数据产品一直是研究者的重要工具。当我们需要获取NDVI(归一化差异植被指数)数据时,通常会面临一个关键选择:是直接…...
从光敏电阻到麦克风:用单片机AD/DA和运放搞定传感器信号采集(附电路分析)
从光敏电阻到麦克风:用单片机AD/DA和运放搞定传感器信号采集(附电路分析) 当我们需要将现实世界中的光强、温度或声音信号转化为数字信号进行处理时,传感器信号采集系统就成为了连接物理世界与数字世界的桥梁。本文将带你从零开始…...
计算机毕业设计 | vue+SpringBoot凌云在线阅读平台 图书借阅管理系统(附源码)
1, 概述 1.1 课题背景 随着现在科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用越来越重要,在我国图书馆计算机等 信息技术的应用起步…...
从 strtok 到 stringstream:C++ 字符串分割的‘现代化’升级指南
从 strtok 到 stringstream:C 字符串分割的现代化升级指南 在C开发中,字符串处理是最基础却也是最容易出问题的环节之一。许多从C语言转向C的开发者,往往带着strtok等传统字符串处理函数的使用习惯。然而,随着C标准库的不断进化&…...
排序不只是排大小:深入理解 Python 稳定排序,以及它如何让多关键字排序更优雅、更可靠
排序不只是排大小:深入理解 Python 稳定排序,以及它如何让多关键字排序更优雅、更可靠 在很多人的印象里,排序是编程入门阶段最基础的内容之一:把数字从小到大排好,把字符串按字母顺序整理出来,似乎没有太多…...
别再只复现了!从CVE-2016-4977看Spring Security OAuth的历史安全设计缺陷与演进
从CVE-2016-4977看Spring Security OAuth的安全演进与设计启示 2016年曝光的Spring Security OAuth远程代码执行漏洞(CVE-2016-4977)如同一记警钟,至今仍对现代应用安全架构产生深远影响。这个漏洞不仅揭示了早期版本中SpEL表达式处理的致命缺…...
不止于造模:MP DSS与FastDNA试剂盒如何联动,搞定粪便样本的基因提取难题?
从DSS造模到高效DNA提取:破解肠道菌群研究的关键技术链 在肠道微生态与炎症机制研究中,小鼠DSS肠炎模型已成为探索溃疡性结肠炎病理机制的黄金标准。然而,许多科研团队在成功建立动物模型后,常面临一个被低估的技术瓶颈——如何从…...
STM32F103RCT6实战:手把手教你用Clion+OpenOCD进行在线调试与代码下载
STM32F103RCT6开发实战:CLionOpenOCD高效调试全攻略 嵌入式开发者常面临调试效率低下的痛点。当传统IDE的调试功能无法满足需求时,JetBrains CLion配合OpenOCD的方案能带来质的飞跃。本文将手把手带你搭建完整的STM32F103RCT6开发环境,重点解…...
(以UVM Sequence为例) 巧用Verdi交互调试模式追踪事务流与断点回退
1. Verdi交互调试模式入门指南 第一次接触Verdi的交互调试功能时,我完全被它的强大震撼到了。想象一下,你正在调试一个复杂的UVM验证环境,突然发现某个关键数据包在Sequence到Driver的路径上神秘消失了。传统调试方式可能需要反复修改代码、重…...
别再只盯着AUC了!临床预测模型评估新宠NRI和IDI,手把手教你用R语言实战解读
临床预测模型评估进阶:NRI与IDI的实战解读与R语言实现 在临床预测模型的研究中,我们常常陷入一个思维定式——将AUC(曲线下面积)视为评估模型性能的黄金标准。然而,当两个模型的AUC差异仅为0.02或0.03时,我们真的能自信地说新模型…...
