
网罗开发小红书、快手、视频号同名大家好我是展菲目前在上市企业从事人工智能项目研发管理工作平时热衷于分享各种编程领域的软硬技能知识以及前沿技术包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者《ESP32-C3 物联网工程开发实战》图书作者《SwiftUI 入门进阶与实战》超级个体COC上海社区主理人特约讲师大学讲师谷歌亚马逊分享嘉宾科技博主华为HDE/HDG我的博客内容涵盖广泛主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告同时也会提供产品优缺点分析、横向对比并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。展菲您的前沿技术领航员 大家好我是展菲 全网搜索“展菲”即可纵览我在各大平台的知识足迹。每周定时推送干货满满的技术长文从新兴框架的剖析到运维实战的复盘助您技术进阶之路畅通无阻。文章目录引言一、什么是 Store二、为什么鸿蒙 App 必须有 Store三、Store 应该放什么四、Store 不应该放什么五、推荐的 Store 分层第一层 Global Store第二层 Domain Store第三层 UI State六、Store 和 System 的关系七、Store 更新的最佳实践八、Store Task 架构九、Store AI Agent十、Store 分布式同步十一、一个完整示例十二、未来鸿蒙 App 的 Store 演进总结引言很多人第一次接触 Store 架构时都会有一个疑问ArkUI 已经有 State 为什么还需要 Store看起来State 能更新UI Link 能传递状态 Observed 能监听变化似乎已经够用了。但只要项目开始变大很快就会发现状态到处都是 页面互相依赖 业务越来越难维护最后出现一种熟悉的现象改一个状态 整个项目一起刷新所以在中大型鸿蒙项目里Store 不是可选项而是架构基础设施。一、什么是 Store一句话解释Store 是应用唯一可信的状态中心。例如用户信息错误做法PageA.user PageB.user PageC.user三个页面各存一份结果数据不一致正确做法userStore.user所有页面共享同一份状态结构UI ↓ Store ↓ System ↓ Repository二、为什么鸿蒙 App 必须有 Store很多项目后期崩掉本质原因其实只有一个状态没有统一管理。例如Stateuser:User页面Athis.user.nameTom页面Bthis.user.nameJack结果谁最后写入 谁生效状态来源彻底失控。Store 的核心作用统一状态 统一更新 统一通知即Single Source Of Truth唯一状态源。三、Store 应该放什么很多开发者容易把 Store 做成万能仓库什么都往里面塞例如showDialog loading animation scrollOffset这其实是不对的。正确原则Store 只存业务状态例如用户 订单 商品 购物车 消息示例exportclassUserStore{user?:User}exportclassOrderStore{orders:Order[][]}四、Store 不应该放什么第一类UI状态例如StateloadingfalseStateshowDialogfalse这些应该属于页面而不是Store第二类临时状态例如keywordcurrentInput这些应该页面销毁即销毁不应该进入全局状态。五、推荐的 Store 分层很多项目后期混乱原因是只有一个Store例如appStore里面用户 订单 支付 商品 聊天全部混在一起。正确结构Global Store ↓ Domain Store ↓ UI State第一层 Global Store负责登录 用户 设备 权限示例exportclassGlobalStore{user?:User token:string}第二层 Domain Store例如订单领域exportclassOrderStore{orders:Order[][]}商品领域exportclassProductStore{products:Product[][]}消息领域exportclassMessageStore{messages:Message[][]}第三层 UI State例如StateshowDialogfalseStateloadingfalse永远不要进入Store六、Store 和 System 的关系很多项目有一个严重问题System 保存状态例如classOrderSystem{currentOrder:Order}这会导致状态来源隐藏正确结构Store 持有状态 System 处理状态示例StoreexportclassOrderStore{currentOrder?:Order}SystemexportclassOrderSystem{asynccreateOrder(){returnawaitrepository.create()}}七、Store 更新的最佳实践错误写法orderStore.orders.push(order)任何地方都能改结果无法追踪状态来源正确写法classOrderStore{privateorders:Order[][]add(order:Order){this.orders.push(order)}}调用orderStore.add(order)核心原则状态只能通过 Action 修改。八、Store Task 架构未来鸿蒙 App 会越来越多采用Task 驱动结构UI ↓ Task ↓ Store ↓ System例如用户点击Button(提交订单)执行awaittaskCenter.run(create_order)TaskclassCreateOrderTask{asyncrun(){constorderawaitorderSystem.create()orderStore.setOrder(order)}}Store 成为任务结果中心九、Store AI AgentAI Native App 最大问题AI会修改状态例如awaitagent.run(帮我取消订单)如果AI直接操作orders[]整个系统会失控。正确方式AI只能调用orderStore.cancel(id)或者taskCenter.run(cancel_order)即AI不能直接修改状态只能通过Store Task操作系统。十、Store 分布式同步鸿蒙最大的特点多设备例如手机 平板 PC TV此时Store 不仅是状态中心。还是同步中心例如classUserStore{asyncsync(){constuserawaitkvStore.get(user)this.useruser}}结构Distributed KV ↓ Store ↓ UI十一、一个完整示例订单创建流程Button Click ↓ Task ↓ System ↓ Repository ↓ Store Update ↓ UI RenderUIButton(创建订单).onClick((){orderStore.create()})StoreclassOrderStore{order?:Orderasynccreate(){constresultawaitorderSystem.create()this.orderresult}}SystemclassOrderSystem{asynccreate(){returnawaitrepository.create()}}RepositoryclassOrderRepository{asynccreate(){returnhttp.post(/order)}}整个链路职责明确 状态唯一 逻辑清晰十二、未来鸿蒙 App 的 Store 演进早期Page ↓ State中期Page ↓ Store ↓ System未来 AI NativeIntent ↓ Task ↓ Store ↓ System ↓ RepositoryStore 将成为整个应用状态中枢总结如果用一句话总结 StoreStore 不是状态容器而是整个应用的数据秩序。很多鸿蒙项目后期失控并不是因为页面太多功能太复杂AI 太难接入真正的问题只有一个状态没有唯一来源。记住一个非常重要的原则UI负责展示 Store负责状态 System负责处理 Repository负责数据当你真正建立统一Store 领域Store 唯一写入口 Task驱动 无状态System你会明显感受到项目开始变得可预测而这也是中大型鸿蒙 App 能够长期演进的关键基础。