首页/新闻资讯/正文详情

HarmonyOS开发实战:笔友-Models.ets 领域模型设计——类 vs interface 的选型

发布时间:2026/11/13 6:11:25 来源:云帆数科 栏目:资讯中心
HarmonyOS开发实战:笔友-Models.ets 领域模型设计——类 vs interface 的选型
前言在 ArkUI 应用中领域模型是数据层与 UI 层的契约。xiexin 的Models.ets定义了 6 个领域类Letter、PenPal、UserProfile、WriteStats、TimelineEntry、InviteRecord。本文将以Models.ets为蓝本详细剖析领域模型设计的选型包括classvsinterface的对比、Observed装饰器的作用、字段默认值初始化以及空构造函数的必要性。一、xiexin 的领域模型// Models.etsObservedexportclassLetter{id:number0;penPalId:number0;penPalName:string;penPalAvatar:string;honorific:string尊敬的;recipientName:string;greeting:string您好;body:string;closing:string此致\n敬礼;signature:string;signatureSuffix:string敬上;isSender:booleanfalse;status:LetterStatusLetterStatus.WAIT_REPLY;paperStyle:PaperStylePaperStyle.PLAIN;wordCount:number0;isRead:booleanfalse;isFavorite:booleanfalse;createdAt:numberDate.now();updatedAt:numberDate.now();constructor(){}}ObservedexportclassPenPal{id:number0;name:string;avatar:string;signature:string;relationStage:RelationStageRelationStage.NEW;frequency:FrequencyFrequency.WEEKLY;totalLetters:number0;daysSinceMet:number0;lastLetterAt:number0;lastLetterPreview:string;lastLetterStatus:LetterStatusLetterStatus.CAN_WRITE;isLastLetterSender:booleanfalse;metAt:numberDate.now();frequencyLastModified:number0;pendingFrequencyChange:Frequency|nullnull;constructor(){}}二、class vs interface 选型维度classinterfaceObserved 装饰器支持不支持默认值初始化支持语法简化不支持运行时类型检查支持不支持响应式追踪通过 Proxy 实现无法追踪三、Observed 装饰器的作用ObservedexportclassLetter{isRead:booleanfalse;}四、空构造函数constructor(){}总结本文详细剖析了 xiexin 的 Models.ets 领域模型设计重点讲解了classvsinterface的选型、Observed装饰器的作用、字段默认值初始化以及空构造函数的必要性。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力HarmonyOS 应用开发指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-dev-guideHarmonyOS 状态管理概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-state-management-overviewHarmonyOS 高性能编程实践https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-high-performance-programmingHarmonyOS 自定义组件https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-custom-components相关资源开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.netHarmonyOS Observed 装饰器https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-observed-and-objectlink十一、深度实现分析11.1 核心原理本功能的核心原理基于 ArkUI 的响应式状态管理机制。当 State 或 Prop 装饰的变量发生变化时ArkUI 引擎会自动触发依赖该变量的 UI 部分重新渲染无需手动操作 DOM。11.2 数据流设计渲染错误:Mermaid 渲染失败: Parse error on line 2: ... LR A[用户交互] -- B[State 变量变化] B ----------------------^ Expecting AMP, COLON, PIPE, TESTSTR, DOWN, DEFAULT, NUM, COMMA, NODE_STRING, BRKT, MINUS, MULT, UNICODE_TEXT, got LINK_ID11.3 性能考虑避免不必要渲染使用 Watch 控制渲染时机减少嵌套深度保持组件树扁平化合理使用缓存计算结果可缓存避免重复计算十二、实际项目应用在 xiexin 项目中本功能被应用于以下场景笔友列表展示笔友通信状态和关系阶段信件卡片展示信件内容和状态标签统计页面展示写信趋势数据和统计指标Componentexportstruct ExampleComponent{Propdata:string[][];build(){Column(){ForEach(this.data,(item:string){Text(item).fontSize(14).padding(8)},(item:string)item)}}}十三、生产环境注意事项错误处理所有异步操作需要 try-catch 包围日志记录使用 hilog 记录关键操作和异常信息性能监控使用 hiTraceMeter 进行性能埋点分析内存管理及时清理定时器和监听器避免内存泄漏try{awaitthis.loadData();hilog.info(0xFF00,TAG,Data loaded successfully);}catch(err){hilog.error(0xFF00,TAG,Failed to load: %{public}s,err.message);}十四、代码审查清单Prop 变量是否已赋默认值定时器是否在 aboutToDisappear 中清理列表渲染的 keyGenerator 是否唯一且稳定条件渲染是否使用 if/else 而非 Visibility.Hidden复杂计算结果是否已缓存事件监听器是否在 aboutToDisappear 中取消注册十五、综合示例EntryComponentstruct DemoPage{Stateitems:string[][示例1,示例2,示例3];Statecount:number0;build(){Column({space:16}){Text(综合示例).fontSize(24).fontWeight(FontWeight.Bold)Text(计数:${this.count}).fontSize(16)Row({space:8}){Button(增加).onClick((){this.count})Button(减少).onClick((){if(this.count0)this.count--})Button(重置).onClick((){this.count0})}List(){ForEach(this.items,(item:string){ListItem(){Text(item).fontSize(14).padding(12)}},(item:string)item)}.height(200)}.padding(16).width(100%)}}十六、相关 API 参考API说明版本要求State组件内部状态管理API 9Prop父子单向传递API 9Link父子双向同步API 9Watch状态变化监听API 9AppStorage全局状态存储API 9PersistentStorage持久化存储API 9十七、代码规范与最佳实践17.1 命名规范组件命名使用 PascalCase如AvatarComponent、PenPalCard变量命名使用 camelCase如avatarSize、selectedIndex常量命名使用 UPPER_CASE如MAX_COUNT、DEFAULT_SIZE私有方法以下划线开头如_getAvatarColor文件命名使用 kebab-case如common-components.ets17.2 代码组织每个组件文件只包含一个 Entry 组件通用组件放在 components/ 目录下页面组件放在 pages/ 目录下常量配置放在 common/ 目录下数据模型放在 model/ 目录下十八、常见面试题Q1: State 和 Prop 的区别是什么A: State 是组件内部私有状态只能在当前组件内修改Prop 是父组件传递进来的数据在子组件中只能读取修改不会影响父组件。Q2: ForEach 的 keyGenerator 为什么重要A: keyGenerator 决定了 ForEach 进行 Diff 算法的依据。如果键值不稳定或重复会导致列表项渲染异常。十九、调试技巧使用 DevEco Profiler监控帧率和布局耗时定位卡顿根因使用 hilog打印关键日志追踪代码执行路径使用 hiTraceMeter进行性能埋点分析识别性能瓶颈使用 Watch监听状态变化调试状态更新逻辑StateWatch(onDebugChange)debugValue:string;onDebugChange():void{console.log(Value changed to:,this.debugValue);}二十、总结与最佳实践20.1 核心要点总结状态管理合理选择 State/Prop/Link/StorageProp 装饰器组件设计遵循单一职责原则保持组件聚焦性能优化大数据量使用 LazyForEach组件复用使用 Reusable代码质量编写单元测试使用 Hypium 框架样式管理使用 AppColors 设计令牌统一管理颜色20.2 避免的反模式避免在 build 函数中执行耗时操作这会阻塞 UI 渲染避免在 State 中存储大型对象会导致不必要的重渲染避免过度使用 Link 增加组件耦合优先使用 Prop避免在 aboutToAppear 中执行异步操作使用生命周期合理分配避免使用全局变量替代 StorageProp全局变量无法触发响应式更新提示以上最佳实践基于 xiexin 项目的实际开发经验总结建议在项目开发中遵守这些原则可以有效提升代码质量和开发效率。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.netHarmonyOS 应用开发指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-dev-guideHarmonyOS 状态管理概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-state-management-overviewHarmonyOS 高性能编程实践https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-high-performance-programmingHarmonyOS 自定义组件https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-custom-componentsHarmonyOS 组件封装https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-component-encapsulationHarmonyOS Builder 装饰器https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-builderHarmonyOS 组件复用https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-reusable二十一、深度扩展阅读21.1 组件设计原则在 ArkUI 中设计组件时需要遵循以下原则单一职责每个组件只负责一个功能避免职责过多开闭原则对扩展开放对修改关闭通过参数化配置实现依赖倒置依赖抽象而非具体实现降低耦合度接口隔离使用小接口而非大接口避免冗余依赖21.2 性能优化策略使用 LazyForEach大数据量列表使用懒加载只渲染可见项组件复用使用 Reusable 装饰器复用组件减少创建销毁开销状态管理合理使用 State/Prop/Link避免不必要重渲染动画优化使用 animateTo 替代 setInterval减少 CPU 占用21.3 代码示例Componentexportstruct OptimizedComponent{Propitems:string[][];StateselectedIndex:number-1;build(){List(){LazyForEach(this.items,(item:string,index:number){ListItem(){Text(item).fontSize(16).padding(16).backgroundColor(this.selectedIndexindex?AppColors.AMBER_LIGHT:AppColors.WHITE).onClick((){this.selectedIndexindex;})}},(item:string)item)}.cachedCount(3).scrollBar(BarState.Off)}}21.4 常见问题与解决方案问题类型具体问题解决方案编译错误Prop 未赋默认值在声明时添加默认值运行时错误路由参数未定义添加空值检查性能问题列表渲染卡顿使用 LazyForEach内存泄漏定时器未清理在 aboutToDisappear 中清理状态丢失State 变量未初始化在声明时赋默认值渲染异常ForEach 键值重复使用唯一 ID 作为键值21.5 推荐实践使用 AppColors 设计令牌统一管理颜色避免硬编码色值使用 Constants.ets 集中管理常量避免魔法数字使用 DataStore 门面模式封装数据操作统一访问入口使用 Builder 提取复用 UI 片段减少重复代码使用 BuilderParam 实现组件插槽提升组件灵活性二十二、补充说明提示本文提供的代码示例基于 HarmonyOS API 12适用于 HarmonyOS 5.0 及以上版本。如果你使用的是较低版本部分 API 可能不兼容。本文所有代码均可在 xiexin 项目中找到实际应用场景建议结合 DevEco Studio 开发工具进行调试和验证如有疑问欢迎在评论区留言讨论我会及时回复更多 HarmonyOS 开发资源请参考官方文档和开发者社区22.1 扩展阅读推荐HarmonyOS 应用开发指南ArkUI 声明式开发范式状态管理详解高性能编程实践自定义组件二十三、补充内容23.1 代码规范与命名约定在团队协作中代码规范是保证代码质量的基础。以下是推荐的命名规范组件命名使用 PascalCase如AvatarComponent、PenPalCard变量命名使用 camelCase如avatarSize、selectedIndex常量命名使用 UPPER_CASE如MAX_COUNT、DEFAULT_SIZE文件命名使用 kebab-case如common-components.ets23.2 注释规范/** * 组件说明 * param name 参数说明 * param size 参数说明 * returns 返回值说明 */Componentexportstruct MyComponent{Propname:string;Propsize:number48;}23.3 版本管理每次发布前更新 versionCode 和 versionName使用语义化版本号 X.Y.Z主版本.次版本.修订版本记录版本变更日志便于回溯问题二十四、参考文档HarmonyOS 应用开发指南ArkUI 声明式开发范式状态管理 V1状态管理 V2高性能编程实践自定义组件组件封装Builder 装饰器

相关推荐

电脑屏幕出现条纹解决方案
电脑屏幕出现条纹解决方案

你的MacBook屏幕是不是突然冒出了几条横线或竖线?有时一闪一闪,有时干脆占满半边屏? 别急着怪屏幕质量,也别直接考虑换电脑! 条纹问题常见两种原因:排线故障(轻度): 屏… · 2026/11/13 11:49:27

Caveman 部署与使用完全手册(Windows + Claude Code)
Caveman 部署与使用完全手册(Windows + Claude Code)

本手册基于你的实际成功经验整理。Caveman 是一个 Claude Code 插件,通过强制 AI 使用极简“穴居人”风格回答,平均节省 65% 的输出 Token,与 Headroom(压缩输入)形成完美互补。 📖 Caveman 项目简介 这是… · 2026/10/2 13:44:43

AI应用价值闭环:从Token成本控制到业务价值转化的实战策略
AI应用价值闭环:从Token成本控制到业务价值转化的实战策略

这次我们来深入探讨一个在AI应用领域越来越受关注的核心问题:从Token消耗到实际价值创造的闭环能力。随着大模型技术的普及,很多企业和开发者发现,单纯拥有强大的模型能力并不足以保证商业成功,真正的竞争力在于如何将每一次API调… · 2026/10/2 23:22:49

关于高压电工证的文章保姆级教程:学历不高怕报不上名?看这篇就够了
关于高压电工证的文章保姆级教程:学历不高怕报不上名?看这篇就够了

关于高压电工证的文章保姆级教程:学历不高怕报不上名?看这篇就够了 你是不是也担心自己学历不够,考不了高压电工证?别急,这期保姆级教程就帮你解决这个问题,手把手带你从报名到拿证,一步都不落。 一、高压电工证的真实价值:不只是“上岗证”… · 2026/11/13 11:48:59

电工证号是哪个编号的?千万别踩坑,外省证书怎么转过来
电工证号是哪个编号的?千万别踩坑,外省证书怎么转过来

电工证号是哪个编号的?千万别踩坑,外省证书怎么转过来 之前考的证在外省能不能转过来?这个问题是很多学员在考取电工证后最关心的。尤其是像你这样在驻马店的学员,可能在外省考过证,或者听说外省的政策和本地不一样,担心自己的证书能不能用得上、能不能… · 2026/11/13 11:48:58

温州哪里考低压电工证要多少钱 官方报名入口在哪找
温州哪里考低压电工证要多少钱 官方报名入口在哪找

温州哪里考低压电工证要多少钱 官方报名入口在哪找 工地太忙根本没时间复习考试,很多一线电工师傅都遇到过这个问题。低压电工证是从事电气作业的“通行证”,缺了它,连最基本的岗位都进不去。现在网上一搜“温州哪里考低压电工证要多少钱”,信息五花八门… · 2026/11/13 11:48:58

电工证高级技师试题郑州报考避坑指南:新手必看的5个真实问题解答
电工证高级技师试题郑州报考避坑指南:新手必看的5个真实问题解答

电工证高级技师试题郑州报考避坑指南:新手必看的5个真实问题解答 你是不是也遇到过这种情况?手头有电工证高级技师试题资料,但不知道去哪报名怕被中介坑?在郑州,很多人在报考电工证高级技师时,被各种培训机构套路,花了不少冤枉钱,还耽误了时间。其实… · 2026/11/13 11:48:58

2026河南最新政策下信安电工证怕考不过白交培训费?这几点你必须知道
2026河南最新政策下信安电工证怕考不过白交培训费?这几点你必须知道

2026河南最新政策下信安电工证怕考不过白交培训费?这几点你必须知道 怕考不过白交培训费?2026河南最新政策下,信安电工证考试门槛没降,反而更规范了。作为焦作本地的中小型施工企业负责人,我每天都在跟特种作业证打交道,从现场违规到报考门槛,… · 2026/11/13 11:48:58

西峰考电工证在哪里考多久拿证怎么最快拿到手
西峰考电工证在哪里考多久拿证怎么最快拿到手

西峰考电工证在哪里考多久拿证怎么最快拿到手 之前考的证在外省能不能转过来?这几乎是每个准备在西峰考电工证的从业者心里最担心的问题。特别是在平顶山从事房建工程的电工,往往在多个项目之间来回跑,证件的有效性和地域适用性直接关系到能否正常上岗。很… · 2026/11/13 11:47:44

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43

维修电公用考电工证吗 在哪考最靠谱
维修电公用考电工证吗 在哪考最靠谱

维修电公用考电工证吗 在哪考最靠谱 工地太忙根本没时间复习考试,你是维修电工,天天在项目上跑,连抽个空背个题都难。那问题来了—— 维修电公用考电工证吗 ?答案是: 必须考 。尤其是在当前施工行业,没有电工证,连进场都可能被拦下。而且,… · 2026/11/13 0:00:08

电工证是不是可以登高?含金量和证书范围你必须知道的事
电工证是不是可以登高?含金量和证书范围你必须知道的事

电工证是不是可以登高?含金量和证书范围你必须知道的事 证书过期了不知道怎么复审延期,这事儿很多人遇到过,尤其是像你这样在郑州金水区做劳务班组负责人,手里握着几十个工人的证书,稍微一疏忽,就可能影响工程进度和公司信誉。特别是电工证是不是可以登… · 2026/11/13 0:00:08

鸡西电工证哪家下证快官方报名入口怎么找
鸡西电工证哪家下证快官方报名入口怎么找

鸡西电工证哪家下证快官方报名入口怎么找 你是不是也担心 学历不高怕报不上名 ?别急,今天我就来跟你说说, 鸡西电工证哪家下证快 ,还有 官方报名入口 到底怎么找,别让那些“代办”“代考”耽误了你的机会。… · 2026/11/13 0:00:08

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码