news 2026/6/25 15:04:50

HarmonyOS PC 文档模型完整范式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS PC 文档模型完整范式


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

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

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

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

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

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

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

文章目录

    • 引言
    • 一、先划清三层:不要一开始就写 UI
    • 二、文档模型:不是数据,而是“状态载体”
      • 错误理解:文档 = 一段内容
      • 正确做法:文档是一个“运行态对象”
    • 三、Workspace:PC 世界的真正核心
      • Workspace 管什么?
      • 一个最小可用的 Workspace 模型
    • 四、Controller:把“操作流程”从 UI 中拔出来
      • 错误:UI 直接 orchestrate 一切
      • 正确:引入 WorkspaceController
    • 五、UI:只是“视图 + 事件映射”
    • 六、为什么这套模型特别适合 PC?
    • 七、一个现实世界的对照
    • 总结

引言

PC 形态下,页面不是核心,文档才是。

那接下来真正的问题只有一个:

文档模型,到底该怎么设计,才能撑住多窗口、状态一致性和长期演进?

一、先划清三层:不要一开始就写 UI

一个标准的 HarmonyOS PC 文档模型,至少拆成三层:

┌──────────────────┐ │ UI(窗口 / 页面) │ └────────▲─────────┘ │ 订阅 ┌────────┴─────────┐ │ 形态模型层 │ ← PC 专属 │ Workspace / Doc │ └────────▲─────────┘ │ 调用 ┌────────┴─────────┐ │ 共用能力层 │ │ Repository / IO │ └──────────────────┘

注意顺序:

  • UI 最后写
  • 模型先稳定
  • 能力层完全不关心形态

二、文档模型:不是数据,而是“状态载体”

错误理解:文档 = 一段内容

interfaceDocument{id:stringcontent:string}

这只能算存储结构,不算模型。

正确做法:文档是一个“运行态对象”

// pc/model/DocumentModel.tsexportclassDocumentModel{readonlyid:stringcontent:stringisDirty:boolean=falselastFocusedAt:number=Date.now()constructor(doc:Document){this.id=doc.idthis.content=doc.content}updateContent(newContent:string){this.content=newContentthis.isDirty=true}}

这里开始出现关键差异:

  • 文档有生命周期
  • 文档知道自己“是否被修改”
  • UI 不再自己维护脏状态

三、Workspace:PC 世界的真正核心

如果只记住一句话,那就是:

PC 应用里,Workspace 才是根对象。

Workspace 管什么?

  • 当前打开了哪些文档
  • 文档之间的关系
  • 应用级行为(保存、关闭、恢复)

一个最小可用的 Workspace 模型

// pc/model/WorkspaceModel.tsexportclassWorkspaceModel{privatedocuments=newMap<string,DocumentModel>()open(doc:Document){if(!this.documents.has(doc.id)){this.documents.set(doc.id,newDocumentModel(doc))}}close(docId:string){this.documents.delete(docId)}list():DocumentModel[]{return[...this.documents.values()]}hasDirtyDocument():boolean{returnthis.list().some(d=>d.isDirty)}}

这里有一个非常重要的工程价值

Workspace 是唯一知道“当前应用状态”的地方。

UI 不需要猜,Service 不需要猜。

四、Controller:把“操作流程”从 UI 中拔出来

错误:UI 直接 orchestrate 一切

onCloseApp(){if(doc.isDirty){save()}exit()}

这种代码一旦出现:

  • 自动保存
  • 批量关闭
  • 崩溃恢复

全都没法统一。

正确:引入 WorkspaceController

// pc/controller/WorkspaceController.tsexportclassWorkspaceController{constructor(privateworkspace:WorkspaceModel,privaterepo:DocumentRepository){}saveAll(){for(constdocofthis.workspace.list()){if(doc.isDirty){this.repo.save({id:doc.id,content:doc.content})doc.isDirty=false}}}canExit():boolean{return!this.workspace.hasDirtyDocument()}}

现在:

  • UI 只发意图
  • Controller 统一流程
  • 模型是状态来源

五、UI:只是“视图 + 事件映射”

到这一步,UI 会变得异常干净。

// EditorWindow.ets@StatedocModel!:DocumentModelbuild(){TextArea({text:this.docModel.content}).onChange(v=>this.docModel.updateContent(v))}

你会发现:

  • UI 不保存任何业务状态
  • 没有保存逻辑
  • 没有生命周期判断

UI 只是模型的一个投影。

六、为什么这套模型特别适合 PC?

因为它天然支持:

  • 多窗口
  • 多文档
  • 后台保存
  • 崩溃恢复
  • 文档级权限控制

而且每一个能力都有清晰落点

能力归属
是否修改DocumentModel
当前打开文档Workspace
保存策略Controller
展示UI

七、一个现实世界的对照

如果你做过这些产品:

  • VS Code
  • Photoshop
  • Keynote
  • Xcode

你会发现它们无一不是文档模型驱动。HarmonyOS PC 只是终于走到了同一个阶段。

总结

HarmonyOS PC 应用的复杂度,不来自窗口多,而来自你有没有一个能承载复杂度的模型。

  • 没有文档模型 → 状态迟早进 UI
  • 没有 Workspace → 多窗口一定崩
  • 没有 Controller → 行为一定散
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 12:08:33

ERNIE-4.5-0.3B-PT入门必看:从部署到调用的完整流程

ERNIE-4.5-0.3B-PT入门必看&#xff1a;从部署到调用的完整流程 1. 为什么选这个镜像&#xff1f;轻量高效&#xff0c;开箱即用 你是不是也遇到过这些问题&#xff1a;想试试国产大模型&#xff0c;但动辄几十GB显存要求让人望而却步&#xff1b;想快速验证一个文本生成想法&a…

作者头像 李华
网站建设 2026/6/25 10:49:22

Chord视觉定位模型部署教程:Supervisor进程守护+自动重启+日志轮转配置

Chord视觉定位模型部署教程&#xff1a;Supervisor进程守护自动重启日志轮转配置 1. 项目概述 Chord是一款基于Qwen2.5-VL多模态大模型的视觉定位服务&#xff0c;能够通过自然语言指令精确定位图像中的目标对象。本教程将详细介绍如何部署该服务&#xff0c;并配置Superviso…

作者头像 李华
网站建设 2026/6/23 21:57:45

从安装到使用:CLAP音频分类镜像完整操作手册

从安装到使用&#xff1a;CLAP音频分类镜像完整操作手册 你是否遇到过这样的场景&#xff1a;一段现场录制的环境音&#xff0c;想快速判断是施工噪音、鸟鸣还是警报声&#xff0c;却要先找专业工具、装依赖、写代码&#xff1f;又或者&#xff0c;正在开发一款智能听障辅助Ap…

作者头像 李华
网站建设 2026/6/22 13:28:21

AI绘画新体验:Z-Image Turbo一键生成惊艳作品

AI绘画新体验&#xff1a;Z-Image Turbo一键生成惊艳作品 1. 开箱即用的极速画板&#xff1a;为什么这次真的不一样&#xff1f; 你有没有过这样的经历&#xff1a; 花半小时调参数、等显存不爆、防黑图、修提示词&#xff0c;最后生成一张图——结果边缘发灰、手长了六根、天…

作者头像 李华
网站建设 2026/6/22 12:14:25

EagleEye部署教程:Kubernetes集群中弹性扩缩容EagleEye推理服务

EagleEye部署教程&#xff1a;Kubernetes集群中弹性扩缩容EagleEye推理服务 1. 为什么需要在K8s里跑EagleEye&#xff1f; 你有没有遇到过这样的情况&#xff1a;白天监控摄像头突然涌入大量视频流&#xff0c;检测请求暴增三倍&#xff0c;GPU显存直接飙到98%&#xff0c;服…

作者头像 李华