当前位置: 首页 > news >正文

鸿蒙 App 架构中的“领域拆分”

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。


文章目录

    • 引言
    • 一、什么是“领域拆分”
      • 常见错误拆分
    • 二、领域拆分的核心思想
      • 正确结构
    • 三、为什么鸿蒙更需要领域拆分
      • 1、跨设备带来的复杂度
      • 2、任务驱动架构
      • 3、AI 接入
    • 四、如何拆分领域
      • 第一步:识别领域
      • 第二步:为领域建立目录
      • 第三步:收拢代码
      • 第四步:定义领域边界
    • 五、领域内部结构设计
      • 示例代码
    • 六、领域之间如何通信
    • 七、结合分布式架构
    • 八、结合 AI / Agent
    • 九、常见错误
      • 1、只是换目录,不换思维
      • 2、领域过大
      • 3、领域过细
    • 十、本质总结
    • 结语

引言

很多鸿蒙项目做到中后期,都会出现一种熟悉的状态:

页面越来越大 逻辑越来越乱 改一个功能影响一大片

你可能已经做了这些优化:

  • 拆组件
  • 抽 Service
  • 做状态管理

但问题依然存在,这时候你需要意识到一件事:

问题不在“代码写法”,而在“架构划分方式”。

更具体一点:

你没有做“领域拆分”。

一、什么是“领域拆分”

一句话解释:

按照“业务语义”,而不是“技术层级”来组织代码。

常见错误拆分

pages/ services/ utils/ models/

看起来很清晰,但实际问题是:业务被打散了

例如一个“订单功能”,代码可能分布在:

pages/order/ services/orderService.ts models/order.ts utils/format.ts

结果:

一个功能,被拆成了四五个地方

二、领域拆分的核心思想

领域拆分的目标是:

让“一个业务 = 一个独立模块”

正确结构

domains/ ├─ order/ │ ├─ OrderService.ts │ ├─ OrderModel.ts │ ├─ OrderRepository.ts │ ├─ OrderTask.ts │ └─ OrderPage.ets

所有“订单相关”的代码:

都在一个地方

三、为什么鸿蒙更需要领域拆分

在传统 App 中,问题还没那么严重。但在鸿蒙环境下:

多设备 分布式 任务驱动 AI 接入

这些都会放大问题。

1、跨设备带来的复杂度

订单流程可能是:

手机选商品 ↓ 平板确认订单 ↓ 手表提醒

如果没有领域拆分:逻辑会散落在多个模块中

2、任务驱动架构

鸿蒙越来越强调:

Task / Agent

例如:

classOrderTask{asynccreateOrder(itemId:string){returnawaitorderService.create(itemId)}}

Task 必须依赖“完整领域能力”

3、AI 接入

AI 调用的是:

能力(领域)

而不是:

页面

例如:

awaitagent.run("帮我查订单")

必须有:

OrderDomain

四、如何拆分领域

第一步:识别领域

问自己:

用户能做哪些事?

例如:

  • 用户
  • 订单
  • 商品
  • 搜索
  • 支付

每一个都是一个领域

第二步:为领域建立目录

domains/ ├─ user/ ├─ order/ ├─ product/

第三步:收拢代码

把原来分散的代码:全部搬进对应领域

例如:

// 原来在 services/orderService.ts// 现在domains/order/OrderService.ts

第四步:定义领域边界

例如 Order:

exportclassOrderService{create()cancel()list()}

外部只能通过这些接口访问

五、领域内部结构设计

推荐一个实用结构:

order/ ├─ service/ │ └─ OrderService.ts ├─ model/ │ └─ Order.ts ├─ repository/ │ └─ OrderRepository.ts ├─ task/ │ └─ OrderTask.ts ├─ ui/ │ └─ OrderPage.ets

示例代码

Service

exportclassOrderService{asynccreate(itemId:string){returnawaitorderRepo.save({itemId})}}

Repository

exportclassOrderRepository{asyncsave(order:any){returnawaitkvStore.put("order",order)}}

Task

exportclassOrderTask{asyncrun(params){returnawaitorderService.create(params.itemId)}}

形成闭环:

UI → Task → Service → Repository

六、领域之间如何通信

原则:

领域之间只能通过接口通信

例如:

orderService.create()→ 调用 productService.getPrice()

不要:

直接访问对方内部数据 错误

七、结合分布式架构

领域拆分后,分布式会变得非常自然。

例如:

classOrderRepository{asyncsave(order){awaitdistributedStore.put("order",order)}}

所有设备共享:

同一领域数据

八、结合 AI / Agent

领域就是:

AI 的工具集

例如:

agent.register("order.create",orderTask.run)

AI 调用的是:

领域能力

九、常见错误

1、只是换目录,不换思维

代码还是耦合

2、领域过大

User + Order + Payment 写在一起 错误

3、领域过细

一个小功能一个领域 错误

建议:

按业务能力拆分

十、本质总结

如果用一句话总结:

领域拆分,是把“业务本身”变成架构单位。

对比:

维度传统结构领域拆分
拆分方式技术业务
模块边界模糊清晰
可维护性
AI 支持

结语

很多鸿蒙项目做着做着就乱了,本质原因只有一个:

架构没有围绕“业务”来设计。

当你完成领域拆分之后,你会明显感受到:

  • 代码更好找
  • 逻辑更清晰
  • 功能更容易扩展

更重要的是:

分布式 AI 多设备

这些能力会变得“自然可接入”。

http://www.jsqmd.com/news/746307/

相关文章:

  • 从‘找色’到‘AI自瞄’:聊聊FPS游戏外挂的‘非内存’进化史(附大漠插件+易语言早期代码)
  • RocketMQ消费者负载均衡终极指南:如何实现高效消息分发
  • C++新手也能懂:手把手教你用xlnt库从Excel读取游戏配置表(含中文乱码解决)
  • 硬核干货】万字长文吃透PID算法:从通俗原理解析到C语言实战落地(附保姆级调参口诀)
  • 联邦迁移学习(FTL)深度解析:原理、实战与未来
  • 如何永久禁用Windows Defender:开源管理工具的终极指南
  • MakerAi:AI如何革新硬件开发,从代码生成到全流程辅助
  • Qt6实战:用QProcess、共享内存和TCP/IP三种方式搞定进程间通信(附完整代码)
  • Ollama桌面客户端:图形化界面提升本地大模型管理效率
  • 联想ThinkEdge SE60n Gen 2边缘AI计算机解析
  • 5分钟解锁Cursor Pro无限使用:告别AI编程助手限制的终极方案
  • TiKV内存管理终极指南:10个实用技巧避免内存溢出
  • macbook开发环境的配置记录
  • 10个Amazon Redshift Utils安全最佳实践:身份管理和权限控制完整指南
  • Rust 微服务性能优化:从 500ms 到 50ms 的实战记录
  • 从图像处理到推荐系统:盘点np.linalg.norm()在Python项目里的5个高频用法
  • Gerev AI API使用教程:构建自定义搜索应用的最佳实践
  • Node Editor Framework安装配置详解:从UPM到开发版本的全流程教程
  • 【Java 25密封类模式实战指南】:20年架构师亲授5大高危误用场景与3步安全迁移法
  • Depth-Anything-V2:重新定义单目深度估计的技术范式与产业应用边界
  • 终极Streamlink Twitch GUI高级配置指南:自定义播放器、热键和主题设置全攻略
  • Krypton:革命性.NET WinForms控件套件完全指南
  • 终极指南:如何快速实现blog_os的多平台交叉编译与工具链配置
  • Pearcleaner:macOS系统清理的终极解决方案,彻底告别应用残留文件
  • 夜间视觉与深度估计:UniK3D与EgoNight技术解析
  • PEzor源码深度解析:Shellcode加载与注入机制揭秘
  • 终极指南:ForkHub项目架构全解析——基于官方废弃应用的Android GitHub客户端重生之路
  • 终极指南:使用Rust编写云原生操作系统的完整教程
  • tmux-sensible代码架构分析:从bash脚本看优雅的配置管理
  • macOS开发环境终极安全指南:Laptop脚本权限设置最佳实践