从小项目到大型鸿蒙 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

Flutter 三方库 better_commit 的鸿蒙化适配指南 - 实现具备语义化提交规范与自动化交互的 Git 工作流插件、支持端侧版本工程的高效规范化审计实战

Flutter 三方库 better_commit 的鸿蒙化适配指南 - 实现具备语义化提交规范与自动化交互的 Git 工作流插件、支持端侧版本工程的高效规范化审计实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 better_commit 的鸿蒙化适配指南 - 实现具备语义化提交规范与自动化交互的 Git 工作流插件、支持端侧版本工程的高效规范化审计实战 前言 在进行 Flutter for OpenHarmony 开发时,当团队规模扩大到需要多人协同、频繁提交代码时,凌乱的 Commit Message 会让 Git 历史变得难以审计(如:分不清哪些是功能修复、哪些是底层鸿蒙适配)。better_commit 是一款专注于极致规范化提交的 CLI 增强工具。本文将探讨如何在鸿蒙端构建极致、专业的工程化提交标准。 一、原直观解析 / 概念介绍 1.1 基础原理 该库建立在“Angular 提交规范”之上。它通过交互式的命令行引导(

By Ne0inhk

Altera USB-Blaster驱动安装:FPGA下载基础完整指南

从零搞定Altera USB-Blaster驱动安装:FPGA下载不踩坑实战指南 你有没有遇到过这样的场景? 辛辛苦苦写完Verilog代码,综合布线全部通过,满心期待地打开Quartus Programmer准备烧录——结果却弹出“ No hardware available ”或“ Can’t access JTAG chain ”。 别急,这大概率不是你的设计出了问题,而是那个看似简单、实则暗藏玄机的 USB-Blaster 驱动没装好 。 在FPGA开发中,硬件连接的稳定性往往比逻辑设计更先决定成败。而作为Intel(原Altera)官方标配的编程工具, USB-Blaster 虽小,却是打通PC与FPGA之间通信链路的关键枢纽 。一旦驱动异常,再完美的设计也只能“望板兴叹”。 本文将带你彻底搞懂 USB-Blaster 的工作原理、驱动机制和安装全流程,重点解决 Windows 平台下常见的识别失败、签名阻止、反复掉线等顽疾,并提供可复用的调试脚本和工程实践建议,助你构建一个稳定可靠的 FPGA 下载环境。 USB-Blaster 到底是什么?

By Ne0inhk

电力线路绝缘子破损识别无人机巡检

电力线路绝缘子破损识别无人机巡检:基于阿里开源万物识别模型的落地实践 引言:电力巡检智能化转型中的核心痛点 在高压输电网络中,绝缘子作为支撑导线、隔离电流的关键部件,其结构完整性直接关系到电网运行安全。传统人工巡检方式不仅效率低下,且在高山、峡谷等复杂地形中存在作业风险。近年来,无人机巡检已成为电力系统运维的重要手段,但海量图像数据的处理仍依赖人工判读,成为智能化升级的瓶颈。 当前主流方案多采用定制化目标检测模型(如YOLO系列)进行缺陷识别,但面临两大挑战: - 样本稀缺:绝缘子破损属于小概率事件,高质量标注数据难以获取; - 泛化能力弱:单一任务模型难以应对污秽、覆冰、遮挡等复合异常场景。 在此背景下,阿里云开源的“万物识别-中文-通用领域”模型为电力视觉巡检提供了新思路。该模型基于大规模中文图文对预训练,在少样本甚至零样本条件下具备强大的视觉理解能力,特别适合电力设备这类专业性强、异常样本稀少的工业场景。 本文将围绕如何利用该模型实现绝缘子破损的高效识别,详细介绍从环境配置、推理部署到工程优化的完整实践路径,并结合真实巡检案例验证其有效性。 技术选型:为何选择“万

By Ne0inhk

Counterfeit-V3.0 Stable Diffusion模型:突破AI绘画构图限制的完整解决方案

Counterfeit-V3.0 Stable Diffusion模型:突破AI绘画构图限制的完整解决方案 【免费下载链接】Counterfeit-V3.0 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/Counterfeit-V3.0 你是否曾经遇到过这样的困扰?精心构思的prompt在AI绘画中总是无法呈现理想的构图效果,人物姿态僵硬缺乏动感,尝试各种参数组合却始终难以突破风格瓶颈。Counterfeit-V3.0的出现,为这些创作痛点提供了全新的解决思路。 问题诊断:AI绘画的三大核心挑战 在深入技术细节前,让我们先明确当前AI绘画面临的主要问题: 构图僵化难题 🎨 传统模型在复杂场景构图方面表现欠佳,无法充分理解用户对画面布局的深层需求。 风格统一困境 🌟 多元素融合时容易出现风格不一致,导致画面整体感被破坏。 细节控制不足 🔍 对特定部位的精雕细琢往往力不从心,难以实现精准控制。 技术突破:Counterfeit-V3.0的创新解决方案 自由构图技术的核心原理 Counterfeit-V3.

By Ne0inhk