HarmonyOS掌上记账APP开发实践第53篇:领域组件设计模式:bill_base 与 asset_base 的领域驱动设计
053 — 领域组件设计模式bill_base 与 asset_base 的领域驱动设计简介在传统 MVC 架构中业务逻辑和 UI 代码往往混杂在一起导致代码难以复用和测试。MoneyTrack 引入了领域驱动设计DDD思想将核心业务逻辑抽取到领域基础包bill_base和asset_base中。这些基础包遵循无 UI 纯逻辑的原则只包含 Enums枚举、Types类型定义和 Models数据模型三部分不依赖任何 UI 框架。这种设计让同一套业务逻辑可以被不同 UI 组件复用也大幅简化了单元测试——测试领域包不需要搭建 UI 环境。核心知识点1. DDD 领域驱动设计DDD 将应用按业务领域拆分为独立的限界上下文bill_base账单位领域包含账单类型枚举、账单状态、收支类别、账单查询参数。asset_base资产领域包含资产类型、资产账户模型、货币类型、资产统计聚合。每个领域包自治管理自己的数据结构和业务规则彼此之间通过 common 层的共享基类如BaseEntity实现低耦合的跨领域引用。2. 领域包的三层结构每一个领域基础包都严格遵循 Enums / Types / Models 三层架构asset_baseEnums/AssetType.ets资产类型枚举Types/AssetFilter.ets资产筛选接口Types/AssetReport.ets资产报表类型Enums/CurrencyType.ets货币类型枚举Models/AssetModel.ets资产数据模型Models/AssetCalculator.ets资产计算器bill_baseEnums/BillType.ets账单类型枚举Types/BillQueryParams.ets查询参数接口Types/BillSummary.ets统计摘要类型Enums/BillStatus.ets账单状态枚举Enums/CategoryType.ets收支类别枚举Models/BillModel.ets账数据模型Models/BillValidator.ets账单校验器Enums 层定义领域内所有的枚举常量。例如BillType.EXPENSE表示支出、AssetType.CASH表示现金资产。Types 层定义 TypeScript 接口和类型别名用于跨模块的数据传递约定。例如BillQueryParams定义了账单列表的筛选条件接口。Models 层定义数据模型类包含数据验证、格式化、业务计算等纯方法不涉及任何 UI 渲染。3. 领域包与 UI 包的分离原则领域包与 UI 包的分离是 DDD 在鸿蒙工程中落地的核心原则领域包bill_base / asset_base纯 ArkTS 代码零 UI 依赖可独立编译和测试。UI 包bill_card / asset_card包含 Component 声明依赖 UI 框架引用领域包的数据类型。分离的好处当 UI 框架升级或替换时领域逻辑不受影响同一套领域逻辑可以同时服务于多个 UI 组件。4. 跨领域引用虽然每个领域包独立自治但在实际业务中账单与资产存在自然的关联。跨领域引用通过 common 层的共享基类实现// common/lib-utils/src/main/ets/BaseEntity.etsexportabstractclassBaseEntity{id:string;createdAt:string;updatedAt:string;abstractvalidate():boolean;}// bill_base/Models/BillModel.etsimport{BaseEntity}frommoneytrack/lib-utils;exportclassBillModelextendsBaseEntity{amount:number;categoryId:string;assetId:string;// 关联资产ID通过 ID 引用而非直接引用 AssetModelvalidate():boolean{returnthis.amount0!!this.categoryId;}}这里的关键原则是通过 ID 引用而非对象引用——BillModel 持有 assetId 字段指向资产但不直接持有 AssetModel 对象从而避免 bill_base 对 asset_base 的强依赖。项目代码案例Enums/Types/Models 三层完整代码框架Enums/BillType.etsexportenumBillType{EXPENSEexpense,INCOMEincome,TRANSFERtransfer}Types/BillQueryParams.etsexportinterfaceBillQueryParams{type?:BillType;startDate?:string;endDate?:string;categoryIds?:string[];minAmount?:number;maxAmount?:number;keyword?:string;}Models/BillValidator.ets业务校验逻辑exportclassBillValidator{staticvalidateAmount(amount:number):string|null{if(amount0)return金额必须大于零;if(amount99999999.99)return金额超出上限;if(!/^\d(\.\d{1,2})?$/.test(String(amount)))return金额格式错误最多两位小数;returnnull;}staticvalidateBill(bill:BillModel):string[]{consterrors:string[][];constamountErrorthis.validateAmount(bill.amount);if(amountError)errors.push(amountError);if(!bill.categoryId)errors.push(请选择收支类别);if(!bill.assetId)errors.push(请选择关联资产);returnerrors;}}asset_base/Models/AssetModel.etsexportclassAssetModel{id:string;name:string;type:AssetType;balance:number;currency:string;formatBalance():string{return¥${this.balance.toFixed(2)};}isOverdrawn():boolean{returnthis.balance0;}}领域驱动设计的核心价值在于业务逻辑独立于 UI 框架、可复用、可测试为后续 6 个 UI 组件包的开发提供了稳固的基础。推荐参考文档领域驱动设计DDD基础组件化架构设计模式ArkTS 面向对象编程指南

相关新闻

AI人才争夺战:硅谷巨头如何争夺顶级研究员

AI人才争夺战:硅谷巨头如何争夺顶级研究员

1. 硅谷人才争夺战背后的行业暗流那天下午,我正和团队在OpenAI的休息区讨论模型架构优化方案,突然看见扎克伯格端着碗热腾腾的越南河粉走进来。这个画面至今想来仍觉得魔幻——全球市值Top5的科技公司CEO,亲自端着食物来我们办公室挖人。更戏…

2026/8/21 14:08:03 阅读更多 →
AI编程实践:Anthropic如何重塑工程师工作模式

AI编程实践:Anthropic如何重塑工程师工作模式

1. Anthropic的AI编程实践与团队管理策略当Anthropic宣布其80%的代码由AI生成时,整个科技行业都在等待这家AI安全研究公司的裁员公告。但令人意外的是,这家公司不仅没有缩减团队规模,反而在持续扩大招聘。这种看似矛盾的现象背后,…

2026/8/17 9:37:48 阅读更多 →
GPT-5.2与Codex性能突破:技术解析与应用实践

GPT-5.2与Codex性能突破:技术解析与应用实践

1. GPT-5.2与Codex性能突破的技术解析 OpenAI最新发布的GPT-5.2和Codex模型在推理速度上实现了40%的提升,这一突破性进展主要源于三个关键技术革新: 1.1 推理堆栈的深度优化 OpenAI工程团队对模型推理过程进行了系统性重构,重点优化了以下环…

2026/8/21 1:33:15 阅读更多 →

最新新闻

从零搭建企业级RAG系统:基于LangChain的检索增强生成实战教程

从零搭建企业级RAG系统:基于LangChain的检索增强生成实战教程

这次我们来看一个面向大模型RAG(检索增强生成)的实战教程项目。这个项目旨在提供一套从零开始、手把手搭建企业级RAG系统的完整流程,目标是帮助开发者避开常见陷阱,快速构建可用的知识库问答应用。如果你正在寻找一个能落地、有代…

2026/8/22 1:41:04 阅读更多 →
宇宙早期莱曼-α绿洲的发现:JWST揭示红移13处高效电离源

宇宙早期莱曼-α绿洲的发现:JWST揭示红移13处高效电离源

1. 项目概述:在宇宙“沙漠”中发现一片“绿洲”最近,一篇发表在《自然》或《天体物理学杂志快报》这类顶刊上的论文标题,成功吸引了我的注意。标题翻译过来大概是:“一片中性星系际沙漠中的莱曼-α绿洲:被证实的谱线和…

2026/8/22 1:41:04 阅读更多 →
技术动态日报 · 2026年8月21日

技术动态日报 · 2026年8月21日

技术动态日报 2026年8月21日 星期五一句话导读:今天最值得圈点的两件事是阿里巴巴新一季财报——阿里云外部商业化收入加速增长 45%、AI 云与算力 EBITA 同比 133%,AI 商业化第一次有了"全栈开花"的财务证据;以及 Vercel Labs 把 …

2026/8/22 1:41:04 阅读更多 →
5分钟还原经典任务栏:RetroBar免费Windows复古任务栏替换工具完整指南

5分钟还原经典任务栏:RetroBar免费Windows复古任务栏替换工具完整指南

5分钟还原经典任务栏:RetroBar免费Windows复古任务栏替换工具完整指南 【免费下载链接】RetroBar Classic Windows 95, 98, Me, 2000, XP, Vista taskbar for modern versions of Windows 项目地址: https://gitcode.com/gh_mirrors/re/RetroBar 你是不是也在…

2026/8/22 1:41:04 阅读更多 →
NAATI 认证翻译件是什么?澳洲移民签证材料翻译要求

NAATI 认证翻译件是什么?澳洲移民签证材料翻译要求

办理澳洲移民签证,很多人资质、材料都准备得妥妥当当,最后偏偏栽在翻译这个小环节上。大家日常用的机器翻译、普通人工翻译,基本都不被澳洲移民局认可,轻则材料退回重做,重则耽误签证审核进度,非常影响申请…

2026/8/22 1:41:04 阅读更多 →
智能客服上线 3 个月复盘:客户满意度从 82% 提升至 94% 的工程实践与数据拆解

智能客服上线 3 个月复盘:客户满意度从 82% 提升至 94% 的工程实践与数据拆解

摘要 智能客服系统的价值不在于“能不能对话”,而在于上线后能否在真实业务场景中持续提升客户满意度。本文复盘一套智能客服系统从上线到稳定运行 3 个月的全过程,拆解满意度从 82% 提升至 94% 背后的关键动作:知识库冷启动策略、意图识别准…

2026/8/22 1:40:03 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →