HarmonyOS 项目中如何拆分共用层与形态模型
子玥酱掘金 / 知乎 / CSDN / 简书 同名大家好我是子玥酱一名长期深耕在一线的前端程序媛 ‍。曾就职于多家知名互联网大厂目前在某国企负责前端软件研发相关工作主要聚焦于业务型系统的工程化建设与长期维护。我持续输出和沉淀前端领域的实战经验日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。技术方向前端 / 跨端 / 小程序 / 移动端工程化内容平台掘金、知乎、CSDN、简书创作特点实战导向、源码拆解、少空谈多落地文章状态长期稳定更新大量原创输出我的内容主要围绕前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读展开。文章不会停留在“API 怎么用”而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍希望能帮你在实际工作中少走弯路。子玥酱 · 前端成长记录官 ✨ 如果你正在做前端或准备长期走前端这条路 关注我第一时间获取前端行业趋势与实践总结 可领取11 类前端进阶学习资源工程化 / 框架 / 跨端 / 面试 / 架构 一起把技术学“明白”也用“到位”持续写作持续进阶。愿我们都能在代码和生活里走得更稳一点 文章目录引言HarmonyOS 项目中为什么要拆「共用层」和「形态模型」一、什么是真正的「共用能力层」典型可以下沉为共用层的内容共用层的一个重要原则二、什么是「形态专属模型层」不同形态模型关注点完全不同手机 App 模型关心什么PC 模型关心什么游戏 / 强交互形态关心什么三、一个推荐的拆分结构真实可用四、PC 形态下一个“必须独立”的模型例子PC 文档模型的核心不是内容而是「状态」五、一个判断标准这段逻辑该放哪六、总结引言HarmonyOS 项目中为什么要拆「共用层」和「形态模型」在 HarmonyOS 项目里真正能复用的东西其实非常有限。如果你把一个项目跑在手机平板PC甚至游戏窗口 / 多实例你会发现一个很残酷的现实逻辑看起来一样但模型几乎一定不一样。所以在 HarmonyOS 中正确的拆法不是「这段代码能不能复用」而是先想清楚哪些东西“不该知道设备形态”哪些东西“必须知道自己跑在哪”这就是共用层和形态模型的边界。一、什么是真正的「共用能力层」共用能力层只有一个标准它不应该关心屏幕大小窗口是否可缩放是否支持多文档是否存在鼠标 / 键盘是否允许后台常驻典型可以下沉为共用层的内容这几类在 HarmonyOS 上几乎永远成立网络请求API / GraphQL / WebSocket数据持久化KV / RDB / 文件 IO业务计算规则状态派生逻辑非 UI跨设备同步协议权限与能力判断封装共用层的一个重要原则共用层只输出“能力”不输出“行为”。举个例子错误的共用层设计// 不该出现在共用层exportfunctionopenDocument(id:string){Router.pushUrl({url:pages/editor,params:{id}})}正确的共用层设计// common/document/DocumentRepository.tsexportclassDocumentRepository{asyncload(id:string):PromiseDocument{// 只负责数据}asyncsave(doc:Document){// 只负责持久化}}“怎么打开、在哪打开、能不能多开”——一律不在共用层出现。二、什么是「形态专属模型层」这是很多 HarmonyOS 项目最容易偷懒、但后期最痛的地方。形态模型层解决的不是 UI而是“这个形态下业务是怎么运转的”不同形态模型关注点完全不同手机 App 模型关心什么单页面 / 栈式导航页面切换即上下文切换生命周期频繁强依赖前后台状态PC 模型关心什么多窗口 / 多文档并行文档是否脏dirty是否允许并排视图窗口最小化 ≠ 生命周期结束游戏 / 强交互形态关心什么帧循环输入源多样化状态常驻UI 与逻辑高度解耦你可以共用数据层但你不可能共用模型层。三、一个推荐的拆分结构真实可用下面是我在 HarmonyOS PC 项目里比较稳定的一套结构src/ ├── common/ │ ├── network/ │ ├── storage/ │ ├── domain/ │ │ ├── Document.ts │ │ └── User.ts │ └── service/ │ ├── app/ │ ├── model/ │ │ └── AppSessionModel.ts │ └── ui/ │ ├── pc/ │ ├── model/ │ │ ├── WorkspaceModel.ts │ │ └── DocumentWindowModel.ts │ └── ui/ │ └── game/ ├── model/ └── runtime/关键点在于common永远不 import app / pcpc/model可以组合common模型之间允许策略不同不强求一致四、PC 形态下一个“必须独立”的模型例子PC 文档模型的核心不是内容而是「状态」// pc/model/DocumentWindowModel.tsexportclassDocumentWindowModel{constructor(privaterepo:DocumentRepository){}document:Document|nullnullisDirty:booleanfalseisActive:booleanfalseasyncopen(id:string){this.documentawaitthis.repo.load(id)this.isDirtyfalse}updateContent(content:string){if(!this.document)returnthis.document.contentcontentthis.isDirtytrue}asyncsaveIfNeeded(){if(this.documentthis.isDirty){awaitthis.repo.save(this.document)this.isDirtyfalse}}}如果你把这个模型强行塞进手机 App页面切换时你会丢状态多文档会变成噩梦后台恢复逻辑会失控不是代码写得不好是模型选错了形态。五、一个判断标准这段逻辑该放哪我给你一个非常好用的判断表问题是否是否依赖窗口 / 页面数量形态模型共用层是否依赖输入方式鼠标 / 触控形态模型共用层是否只关心数据正确性共用层形态模型是否涉及生命周期策略形态模型共用层是否希望跨形态完全复用共用层形态模型六、总结HarmonyOS 的“统一”是能力层的统一不是模型的统一。

相关新闻

Linux基础指令(一)

Linux基础指令(一)

文章目录 Linux的版本以及应用Linux的发行版本Linux在企业中的应用 Linux的基础指令计算机系统(特别是类Unix/Linux系统)的经典分层架构基础指令 Linux的版本以及应用 Linux的发行版本 Debian Debian运⾏起来极其稳定,其“稳定”意味着软件…

2026/7/3 5:49:43 阅读更多 →
深入探讨 .ConfigureAwait() 的实际用途

深入探讨 .ConfigureAwait() 的实际用途

在现代的异步编程中,ConfigureAwait 方法常常被开发者提及和使用,但它的实际用途和使用场景却常常被误解。本文将通过一个具体的例子,深入探讨 ConfigureAwait 的用法和其背后的逻辑。 什么是 ConfigureAwait? 在 C# 中,await 关键字用于异步方法,它允许代码异步等待某…

2026/5/17 1:48:32 阅读更多 →
Excel脚本:巧妙定位非空单元格

Excel脚本:巧妙定位非空单元格

在Excel中处理数据时,常常需要根据某些条件定位并操作特定的单元格。今天我们要探讨的是如何使用Office Script来编写一个函数,该函数可以从给定的起始单元格开始,找到下方所有非空单元格,并将它们存储在一个数组中。这对于数据分…

2026/5/17 1:48:32 阅读更多 →

最新新闻

OpenCode模型配置与切换:本地AI编程的可控性实践

OpenCode模型配置与切换:本地AI编程的可控性实践

1. 项目概述:这不是一个“装完就能用”的玩具,而是一把需要亲手校准的代码刻刀 OpenCode——这个名字在2024年中后期开始频繁出现在国内开发者社区的技术分享帖、内部工具链讨论组和AI辅助编程评测报告里。它不是GitHub Copilot的平替,也不是…

2026/7/3 8:40:27 阅读更多 →
5步彻底解决OFD文件兼容性问题:开源转换工具实战指南

5步彻底解决OFD文件兼容性问题:开源转换工具实战指南

5步彻底解决OFD文件兼容性问题:开源转换工具实战指南 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 你是否曾经因为收到OFD格式的电子发票而无法在手机上查看?是否因为政府发…

2026/7/3 8:38:26 阅读更多 →
AI知识库投喂:企业智能化的关键一步

AI知识库投喂:企业智能化的关键一步

于企业智能化转型的浪潮里面, AI知识库已然变成提升工作效率以及决策质量的核心工具。可是呢, 好多企业在部署AI知识库之际, 常常忽视了“投喂”这个关键环节。所说的“投喂”, 是把企业内部的结构化还有非结构化数据, 像项目文档、会议纪要、客户资料、技术手册等, 有系统地输…

2026/7/3 8:38:26 阅读更多 →
HsMod终极指南:55个功能全面解锁您的炉石传说游戏体验

HsMod终极指南:55个功能全面解锁您的炉石传说游戏体验

HsMod终极指南:55个功能全面解锁您的炉石传说游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是基于BepInEx框架开发的炉石传说增强插件,为您提供了55…

2026/7/3 8:36:25 阅读更多 →
软考中级→高级→系统架构师 vs HCIA→HCIP→HCIE:双轨成长路线图(附2024通过率与平均备考时长)

软考中级→高级→系统架构师 vs HCIA→HCIP→HCIE:双轨成长路线图(附2024通过率与平均备考时长)

更多请点击: https://kaifayun.com 第一章:软考vs华为认证HCIPHCIE区别 软考(计算机技术与软件专业技术资格考试)与华为认证(HCIP/HCIE)代表两类不同定位、目标与评估逻辑的技术能力认证体系。软考由国家工…

2026/7/3 8:36:25 阅读更多 →
如何快速掌握Forza Mods AIO:极限竞速地平线游戏修改终极指南

如何快速掌握Forza Mods AIO:极限竞速地平线游戏修改终极指南

如何快速掌握Forza Mods AIO:极限竞速地平线游戏修改终极指南 【免费下载链接】Forza-Mods-AIO Free and open-source FH4 & FH5 mod tool 项目地址: https://gitcode.com/gh_mirrors/fo/Forza-Mods-AIO Forza Mods AIO是一款专为《极限竞速:…

2026/7/3 8:32:22 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻