从小项目到大型鸿蒙 App 的架构变化

从小项目到大型鸿蒙 App 的架构变化
在这里插入图片描述

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

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

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

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

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

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

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

文章目录

引言

很多开发者刚开始做 HarmonyOS 应用 时,项目规模通常不大:

  • 几个页面
  • 几个组件
  • 一个简单的数据结构

代码结构可能是这样的:

pages components utils 

一开始看起来完全没问题。

但当项目逐渐变大:

  • 页面数量增加
  • 业务逻辑复杂
  • 团队成员变多

原来的结构很快就会出现问题:

  • 代码越来越难维护
  • 状态管理混乱
  • 页面之间耦合严重

我在做一个鸿蒙项目时,从 小型项目结构一路演进到大型应用架构,中间经历了几次比较典型的架构变化。

阶段一:小项目结构

很多鸿蒙项目一开始都是这种结构:

pages ├─ HomePage ├─ DetailPage ├─ ProfilePage components ├─ Banner ├─ Card utils ├─ request ├─ storage 

例如一个页面:

@Entry@Component struct HomePage {@State list:string[]=[]aboutToAppear(){this.loadData()}asyncloadData(){this.list =awaitrequest('/api/list')}build(){List(){LazyForEach(this.list,(item)=>{ListItem(){Text(item)}})}}}

这种结构适合:

  • Demo
  • 小项目
  • 个人练手项目

但随着页面越来越多,会出现几个问题:

  • 页面逻辑越来越重
  • 网络请求散落在各个页面
  • 状态难以复用

阶段二:业务模块化

当页面超过 20 个以上,很多团队会开始进行第一次架构调整。

页面驱动 变成 业务模块驱动

结构变成这样:

features ├─ home │ ├─ HomePage │ ├─ HomeService │ └─ components │ ├─ user │ ├─ ProfilePage │ ├─ UserService │ └─ components │ ├─ order │ ├─ OrderPage │ ├─ OrderService │ └─ components common ├─ components ├─ utils └─ request 

这种结构有一个明显好处:

业务逻辑聚合在一起。

例如:

home ├─ 页面 ├─ 组件 ├─ API 

Home 模块相关代码全部在同一目录。

例如:

classHomeService{asyncfetchFeed(){returnrequest('/api/feed')}}

页面调用:

aboutToAppear(){newHomeService().fetchFeed().then(res =>{this.list = res })}

这样结构会清晰很多。

阶段三:状态管理层出现

当项目继续变大,你会发现新的问题:

  • 页面之间需要共享数据
  • 用户信息到处传
  • 状态同步困难

例如:

用户信息 登录状态 购物车数据 

如果全部用 @Prop@Link 传递,会非常混乱。这时候通常会引入 全局状态层

鸿蒙中常见方式:

@Provide / @Consume 

例如在根组件:

@Provide userInfo: User ={ name:"Tom"}

子组件:

@Consume userInfo: User 

这样可以避免:

层层传参 

很多大型应用还会做 Store 层

store ├─ userStore ├─ cartStore └─ appStore 

例如:

classUserStore{@State userInfo: User |null=nulllogin(user: User){this.userInfo = user }}

这样状态管理就会更清晰。

阶段四:分层架构

当应用规模继续扩大时,仅仅模块化还不够。很多团队会引入 分层架构

典型结构是:

presentation service repository model 

例如:

features └─ order ├─ pages ├─ components ├─ service ├─ repository └─ model 

各层职责:

presentation(UI层)

页面 组件 

service(业务逻辑层)

订单逻辑 状态处理 

repository(数据层)

网络请求 本地缓存 数据库 

例如:

classOrderRepository{asyncfetchOrders(){returnrequest('/api/orders')}}

Service:

classOrderService{ repository =newOrderRepository()asyncgetOrders(){returnthis.repository.fetchOrders()}}

Page:

aboutToAppear(){newOrderService().getOrders().then(res =>{this.list = res })}

这样 UI 就不会直接依赖 API。

阶段五:组件系统化

当项目规模到 几十个页面 时,组件数量会暴涨。很多团队会建立 组件系统

例如:

design-system ├─ Button ├─ Card ├─ Modal ├─ Form └─ Table 

统一设计:

  • UI 风格
  • 交互逻辑
  • 主题

例如:

@Component struct AppButton {@Prop text:stringbuild(){Button(this.text).width(200).height(44)}}

所有页面统一使用:

AppButton 

而不是:

Button 

这样:

  • UI 一致
  • 维护更容易

总结

从小项目到大型鸿蒙应用,架构通常会经历这样一个演进过程:

页面驱动 ↓ 业务模块化 ↓ 状态管理层 ↓ 分层架构 ↓ 组件系统 

很多项目的问题其实不是 技术选型错误,而是:

架构没有随着项目规模演进。

小项目结构用在大项目上,迟早会失控。如果你准备做一个长期维护的鸿蒙应用,建议尽早规划三件事:

1、业务模块划分
2、状态管理方案
3、组件系统设计

把这三件事做好,项目规模变大时,架构会稳定很多。

Read more

企业级在线文档:ONLYOFFICE 核心优势深度解读与测评体验

企业级在线文档:ONLYOFFICE 核心优势深度解读与测评体验

在当今数字化转型的浪潮中,企业的办公模式正在经历从“单机作业”到“云端协同”的深刻变革。尤其是在混合办公、跨地域协作日益普遍的今天,寻找一款既能打破信息孤岛、提高团队协作效率,又能严格保障企业核心商业数据安全的文档处理引擎,成为了每一个 IT 架构师和企业决策者的核心诉求。 我们在评估过市面上众多协作工具后,最终将目光锁定在了 ONLYOFFICE 上。作为一款开源且功能强大的企业级在线文档套件,ONLYOFFICE 在实际业务场景中展现出了令人惊艳的稳定性和功能深度。今天,我就根据自己在企业内部署和试用 ONLYOFFICE 的第一手经验,从实时协作、数据安全、多设备支持等维度,深度解读它的核心优势,看看它是如何真正为企业降本增效的。 🚀 协同即生产力:极简且强大的实时协作体验 在企业日常运营中,最耗费精力的事情莫过于多部门共同编写同一份项目企划书或合并多张财务报表。传统模式下,文件需要在微信、邮件里丢来丢去,不仅版本极其容易混乱,沟通成本也高得惊人。而 ONLYOFFICE 作为一款企业级在线文档工具,完美地解决了这个痛点。 ONLYOFFICE 提供了两种非常贴合企业

By Ne0inhk
Flutter 三方库 hooks_runner 的鸿蒙化适配指南 - 实现声明式的生命周期 Hook 任务管理、支持端侧自动化脚本触发与执行流精准编排实战

Flutter 三方库 hooks_runner 的鸿蒙化适配指南 - 实现声明式的生命周期 Hook 任务管理、支持端侧自动化脚本触发与执行流精准编排实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 hooks_runner 的鸿蒙化适配指南 - 实现声明式的生命周期 Hook 任务管理、支持端侧自动化脚本触发与执行流精准编排实战 前言 在进行 Flutter for OpenHarmony 的自动化工具、CI/CD 插件或具备高度动态逻辑的业务系统开发时,如何有序、可控地执行一系列相互依赖的“任务钩子(Hooks)”?hooks_runner 是一个专为任务生命周期编排设计的轻量级引擎。它能将离散的函数逻辑拆解并组装成一条健壮的执行流水线。本文将介绍如何在鸿蒙端利用该库构建极致的任务执行闭环。 一、原理解析 / 概念介绍 1.1 基础原理 hooks_runner 采用了“注册-触发(Register & Trigger)”模式。它允许开发者在不同的生命周期阶段(如 pre_

By Ne0inhk
【AIGC】ChatGPT 搭配 DALL·E 制作日漫风格小故事全流程揭秘

【AIGC】ChatGPT 搭配 DALL·E 制作日漫风格小故事全流程揭秘

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]本文专栏: AIGC |ChatGPT 文章目录 * 💯前言 * 💯ChatGPT生成故事情节 * 列举故事情节 * 选择故事情节 * 详细描述主角 * 💯DALL·E 生成角色图像 * 选定角色服装 * 生成故事线下的角色图 * 生成故事旁白(用作生成视频提示词) * 💯Runway生成动态视频 * 将故事旁边作为视频提示词 * 文+图生成视频 * 💯小结 💯前言 本文将带领读者一起探索如何利用AI工具,特别是ChatGPT和DALL·E 3,完整体验从文字创意到视觉呈现的全流程,创作充满日漫风格的小故事。这不仅是一次深入了解AI创作潜力的过程,更是一次亲身实践,用这些强大的工具打造出属于自己独特风格故事的机会。 具体来说,文章将聚焦于以下几个方面: * ChatGPT:用于设计生动的故事情节和个性鲜明的角色对话,为创作提供丰富的灵感和文本支持。 * DALL·E 3:为故事赋予日漫风格的视觉表现力,生成充满细节的画面,让创意更加具体和可视化。 * 使用

By Ne0inhk
Flutter 三方库 teno_datetime 的鸿蒙化适配指南 - 实现极简的日期时间格式化与操作增强、支持多语言本地化显示与时区转换

Flutter 三方库 teno_datetime 的鸿蒙化适配指南 - 实现极简的日期时间格式化与操作增强、支持多语言本地化显示与时区转换

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 teno_datetime 的鸿蒙化适配指南 - 实现极简的日期时间格式化与操作增强、支持多语言本地化显示与时区转换 前言 在进行 Flutter for OpenHarmony 开发时,处理日期和时间的展示是一个基础但又容易产生冗余代码的环节。尤其是在需要适配鸿蒙系统多语言环境时,频繁使用 DateFormat 可能会显得不够灵动。teno_datetime 提供了一套语义化的日期处理扩展,让开发者能以极其自然的方式进行时间计算和格式化。本文将探讨如何在鸿蒙端利用该库提升时间管理的开发体验。 一、原理解析 / 概念介绍 1.1 基础原理 teno_datetime 基于 Dart 的扩展方法(Extension Methods)机制。它并没有发明新的复杂日期对象,而是直接为标准的 DateTime 类注入了大量的快捷属性和方法,实现了无感知的增强。 graph LR

By Ne0inhk