在这里插入图片描述

在这里插入图片描述

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名)

大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。

我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括 前端工程化、小程序、React / RN、Flutter、跨端方案
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。

技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:
掘金、知乎、CSDN、简书
创作特点:
实战导向、源码拆解、少空谈多落地
文章状态:
长期稳定更新,大量原创输出

我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。

子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”

持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱

引言

很多人第一次写鸿蒙 App 时,都会有一种错觉:

ArkUI 很简单
状态驱动很舒服
开发效率非常高

于是项目初期往往推进得特别快。

但只要项目开始变大,很快就会进入一种熟悉的状态:

页面越来越大
状态越来越乱
System 越来越重
模块越来越耦合

最后整个项目会慢慢变成:

不敢改
一改就炸

很多团队最后会发现:

真正难的,从来不是“写功能”。

而是:

如何让项目长期保持清晰。

这也是为什么:

重构

会成为中大型鸿蒙项目绕不开的话题。

一、为什么鸿蒙 App 更容易“越写越乱”

因为鸿蒙天然具备:

  • 状态驱动
  • 分布式
  • 多设备
  • 实时同步
  • AI 调度
  • Task 流转

这些能力虽然强大,但也意味着:

系统复杂度会指数级上升。

一个典型项目演化过程

项目初期:

一个页面
几个状态
几个接口

非常简单,三个月后:

页面互相依赖
Store 互相调用
System 到处共享状态

半年后:

没人敢删代码
没人知道状态来源

最后:

整个项目进入“混乱熵增”

二、真正的问题:不是代码多,而是边界消失了

很多人会误以为:

项目乱
是因为代码量大

其实不是,真正的问题是:

边界消失。

例如:

UI 能改状态
System 能改状态
Service 能改状态
AI 也能改状态

最后:

没人知道谁是“真正的数据源”

三、重构第一步:先拆“状态”

很多鸿蒙项目最大的问题:

状态没有分层。

最危险的写法

@State user: User
@State order: Order
@State products: Product[]
@State loading: boolean

页面:

既负责 UI
又负责业务
又负责数据

最后页面会越来越巨大。

正确做法:状态分层

推荐一个非常稳定的结构:

GlobalState(全局)
   ↓
DomainStore(业务)
   ↓
UIState(页面)

1、全局状态

负责:

  • 用户
  • 登录
  • 设备
  • 分布式信息

示例:

globalStore.user

2、业务状态

负责:

  • 订单
  • 商品
  • 搜索
  • 消息

示例:

orderStore.orders

3、页面状态

负责:

  • Loading
  • Dialog
  • Tab
  • 动画

示例:

@State showDialog: boolean

这里最关键的一点:

页面不要存业务数据。

四、重构第二步:System 必须“去状态化”

很多鸿蒙项目最容易出现的问题:

System 越来越胖

例如:

class OrderSystem {

  currentOrder: Order

}

看起来很方便,但后面一定会出现:

  • 状态覆盖
  • 并发冲突
  • 分布式同步异常

正确原则

System 只负责“处理”,不负责“存储”。

正确写法:

class OrderSystem {

  async create(order) {
    return await orderService.create(order)
  }

}

System 应该是:

无状态能力层

而不是:

全局状态黑洞

五、重构第三步:建立“唯一状态入口”

很多项目会这样:

PageA 修改 user
PageB 修改 user
System 修改 user

结果:

状态来源失控

正确模型

一个状态
只有一个写入口

示例

class UserStore {

  user: User

  update(user: User) {
    this.user = user
  }

}

外部只能:

userStore.update(...)

而不是:

this.user = xxx

到处乱改。

六、重构第四步:从“页面驱动”变成“Task 驱动”

传统 App:

页面是核心

但 AI + 鸿蒙时代:

任务才是核心

传统流程

页面
 ↓
按钮
 ↓
功能

新模型

Intent
 ↓
Task
 ↓
State
 ↓
UI

示例:

await taskCenter.run("创建订单")

UI 只负责:

展示任务结果

七、重构第五步:拆“领域”

很多项目的问题:

所有模块互相调用

最后:

改一个功能
整个项目一起震

正确做法:领域隔离

例如:

user/
order/
message/
payment/

每个领域:

  • Store
  • System
  • Repository
  • Task

独立存在。

示例结构

order/
 ├── store/
 ├── system/
 ├── repository/
 ├── task/
 └── ui/

八、重构第六步:建立“状态流”

很多鸿蒙项目的问题:

状态是乱流

必须建立:

统一状态流。

推荐结构

User Action
     ↓
Store
     ↓
System
     ↓
Repository
     ↓
Store Update
     ↓
UI Render

示例

UI

Button("提交")
  .onClick(() => {
    orderStore.submit()
  })

Store

async submit() {
  const result = await orderSystem.create()

  this.order = result
}

System

async create() {
  return await repository.create()
}

这里:

UI 不直接操作数据
System 不直接持有状态

整个系统会清晰很多。

九、为什么 AI 会逼着鸿蒙 App 重构

因为 AI 会极速放大:

架构问题

传统 App:

用户一次操作
只改一个状态

AI App:

一次任务
可能改几十个状态

例如:

await agent.run("整理今天会议")

AI 可能:

  • 更新日历
  • 创建待办
  • 写入笔记
  • 发送消息
  • 修改提醒

如果架构混乱:

整个 App 会瞬间失控

十、真正优秀的鸿蒙项目,都有一个共同点

不是:

页面多漂亮

而是:

结构极其清晰

优秀项目通常具备:

  • 状态分层
  • Store 中心化
  • 无状态 System
  • Task 驱动
  • 领域拆分
  • 分布式状态隔离

这些东西:

决定项目后期是否还能继续迭代。

十一、一个非常重要的认知

很多人以为:

重构 = 重写

其实不是,真正的重构:

是重新建立“边界”。

比如:

原来

所有模块互相依赖

重构后

模块职责明确
状态边界明确
数据流明确

本质上:

重构不是“改代码”
而是“改结构”

十二、本质

如果用一句话总结:

鸿蒙 App 的混乱,本质是“边界失控”。

真正好的架构一定具备:

状态有边界
模块有边界
任务有边界
设备有边界
AI 有边界

一旦边界清晰:

整个系统会突然稳定

结语

很多鸿蒙项目后期崩掉,并不是因为:

  • 功能太复杂
  • AI 太难
  • 分布式太重

真正的问题只有一个:

系统没有“结构秩序”。

记住一句话:

代码的混乱,
本质是架构边界的混乱。

当你真正完成:

  • 状态分层
  • Task 化
  • Store 中心化
  • 无状态 System
  • 领域拆分

你会明显感受到:

项目终于“能长期维护了”
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐