鸿蒙 App 架构重建后,为何再次失控

📅 发布时间:2026/7/15 16:18:35 👁️ 浏览次数:
鸿蒙 App 架构重建后,为何再次失控
子玥酱掘金 / 知乎 / CSDN / 简书 同名大家好我是子玥酱一名长期深耕在一线的前端程序媛 ‍。曾就职于多家知名互联网大厂目前在某国企负责前端软件研发相关工作主要聚焦于业务型系统的工程化建设与长期维护。我持续输出和沉淀前端领域的实战经验日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。技术方向前端 / 跨端 / 小程序 / 移动端工程化内容平台掘金、知乎、CSDN、简书创作特点实战导向、源码拆解、少空谈多落地文章状态长期稳定更新大量原创输出我的内容主要围绕前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读展开。文章不会停留在“API 怎么用”而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍希望能帮你在实际工作中少走弯路。子玥酱 · 前端成长记录官 ✨ 如果你正在做前端或准备长期走前端这条路 关注我第一时间获取前端行业趋势与实践总结 可领取11 类前端进阶学习资源工程化 / 框架 / 跨端 / 面试 / 架构 一起把技术学“明白”也用“到位”持续写作持续进阶。愿我们都能在代码和生活里走得更稳一点 文章目录引言第一次架构重建本质上只修复了表面这些都还停留在“应用内部视角”第二次失控的真正源头系统边界被打开代码对比单体思维 vs 系统节点思维传统单 App 状态写法系统节点化的状态归属一个关键误判把“架构问题”当成“代码问题”1. 任务模型没有被重建页面驱动模型任务驱动模型2. 状态边界没有系统化错误示例状态散落正确方向状态分层归属3. 协作模型仍是单机思维真正的协作起点为什么第二次失控往往更致命第一次混乱时团队通常还有但第二次复杂度回潮时1. 业务已经很重2. 架构信任开始下降真正的分水岭从“应用架构”走向“系统架构”从这里走向这里总结引言几乎每一个做过中大型鸿蒙项目的团队都会经历同一段路径第一版能跑但很乱决心重建架构推倒重来第二版结构清晰、分层优雅、状态可控半年之后再次变得难改、难测、难扩展很多人会困惑我们不是已经做过一次“正确的架构重建”了吗为什么复杂度还是回来了真正的答案其实很残酷第一次重建解决的是“代码形态问题”。但鸿蒙 App 的失控本质是“系统模型问题”。第一次架构重建本质上只修复了表面团队第一次重建时通常会做这些事重新划分模块引入统一状态管理规范路由与生命周期把工具类、业务层、UI 层全部梳理一遍这一步非常必要因为它解决的是可读性、可维护性、可协作性。这些都还停留在“应用内部视角”第一次重建关注的是页面怎么拆状态怎么流动模块怎么依赖而鸿蒙真正带来的变化是应用不再是孤立运行的单体而是系统级协作节点。如果架构重建仍然围绕“单 App 自洽”那么复杂度回潮只是时间问题。第二次失控的真正源头系统边界被打开在传统移动端里App 的边界 进程边界但在鸿蒙里多设备协同跨应用任务流原子化服务组合系统级数据共享都会让一个问题出现你的架构开始承担“系统职责”。代码对比单体思维 vs 系统节点思维传统单 App 状态写法// 页面内部直接持有业务状态StateorderList:Order[][]asyncaboutToAppear(){this.orderListawaitOrderApi.queryList()}问题不在代码对不对而在于状态只属于这个页面。一旦出现跨设备继续任务系统恢复其他应用修改订单这个状态模型立即失效。系统节点化的状态归属// 任务级 Store而不是页面级状态classOrderTaskStore{privateorders:Order[][]asyncload(){this.ordersawaitOrderRepository.query()}getOrders(){returnthis.orders}}页面只订阅任务Stateorders:Order[][]aboutToAppear(){this.ordersOrderTaskManager.current().getOrders()}关键变化状态从「页面所有」 → 变为「任务所有」这就是系统化第一步。一个关键误判把“架构问题”当成“代码问题”当复杂度再次上升时团队常见反应是再做一次重构再细化分层再抽象一套基类再统一一套状态框架但现实是复杂度根本不在代码层。而在三个更深的结构。1. 任务模型没有被重建很多鸿蒙 App 仍然是页面 业务入口页面生命周期 业务生命周期但鸿蒙更接近任务才是真正的业务载体。页面驱动模型// 每个页面自己发请求、管生命周期aboutToAppear(){this.loadData()}任务驱动模型classUploadTask{start(){/* 启动 */}pause(){/* 暂停 */}resume(){/* 恢复 */}}页面只负责展示Stateprogress:number0aboutToAppear(){this.progressUploadTaskManager.current().progress()}页面从“控制者”降级为“观察者”。复杂度立刻下降一个维度。2. 状态边界没有系统化第一次重建通常只解决UI 状态页面状态模块状态但鸿蒙真正困难的是跨设备状态跨任务状态系统恢复状态分布式同步状态错误示例状态散落globalThis.userInfouserStatecartCountLocalStorage.get(cart)看似方便实际意味着状态没有归属权。正确方向状态分层归属classSessionStore{}// 登录态classTaskStore{}// 任务态classDeviceStore{}// 设备协同态classUIStore{}// 纯界面态先分清“谁拥有状态”再谈状态管理框架。3. 协作模型仍是单机思维很多项目虽然运行在鸿蒙上但架构仍是单机应用 分布式补丁典型代码味道if(isDistributed){syncData()}这说明分布式只是 feature不是基础模型。真正的协作起点interfaceTask{id:stringdeviceId:stringstate:running|paused}TaskScheduler.dispatch(task)先有“可调度任务” 才有“多设备协同”。顺序一旦反了架构一定再次失控。为什么第二次失控往往更致命第一次混乱时团队通常还有重构信心架构热情时间窗口但第二次复杂度回潮时1. 业务已经很重2. 架构信任开始下降团队会出现一种声音“别再重构了上次也没解决问题。”这是最危险的阶段。因为这意味着系统将进入长期失控而不是短期混乱。真正的分水岭从“应用架构”走向“系统架构”要阻止第二次失控唯一的方法不是再做一次代码级重建而是完成一次更深的跃迁从这里设计一个结构清晰的 App走向这里设计一个可参与系统协作的节点总结很多鸿蒙项目并不是死在技术难度分布式能力性能瓶颈而是死在第二次复杂度回潮之后团队失去了再次进化的能力。第一次重建是技术问题。第二次失控是认知问题。