鸿蒙游戏开发的正确分层方式

张开发
2026/6/8 5:06:16 15 分钟阅读
鸿蒙游戏开发的正确分层方式
子玥酱掘金 / 知乎 / CSDN / 简书 同名大家好我是子玥酱一名长期深耕在一线的前端程序媛 ‍。曾就职于多家知名互联网大厂目前在某国企负责前端软件研发相关工作主要聚焦于业务型系统的工程化建设与长期维护。我持续输出和沉淀前端领域的实战经验日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。技术方向前端 / 跨端 / 小程序 / 移动端工程化内容平台掘金、知乎、CSDN、简书创作特点实战导向、源码拆解、少空谈多落地文章状态长期稳定更新大量原创输出我的内容主要围绕前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读展开。文章不会停留在“API 怎么用”而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍希望能帮你在实际工作中少走弯路。子玥酱 · 前端成长记录官 ✨ 如果你正在做前端或准备长期走前端这条路 关注我第一时间获取前端行业趋势与实践总结 可领取11 类前端进阶学习资源工程化 / 框架 / 跨端 / 面试 / 架构 一起把技术学“明白”也用“到位”持续写作持续进阶。愿我们都能在代码和生活里走得更稳一点 文章目录引言一、为什么“分层”这么重要不分层的结果分层之后二、推荐分层结构核心三、第一层Model数据结构作用示例四、第二层Store状态层作用示例五、第三层Service业务逻辑作用示例六、第四层ComponentUI 组件作用示例七、第五层Page页面层作用示例八、第六层Agent作用示例九、完整调用链用户点击Service 更新状态Store 通知 UIUI 自动更新加上 AI十、为什么这个分层是“正确的”1、复杂度2、扩展性3、可维护性十一、常见错误分层错误 1页面写逻辑错误 2UI 直接改状态错误 3没有 Store错误 4AI 写在 UI总结引言很多人刚开始做鸿蒙游戏时代码大概是这样的EntryComponentstruct GamePage{StateplayerX:number0Statescore:number0move(){this.playerX10}addScore(){this.score}build(){Column(){Text(Score:${this.score})Button(Move).onClick(()this.move())}}}一开始没问题但随着功能增加很快就会出现页面越来越大逻辑越来越乱状态难以维护无法扩展多端 / AI最后你会发现问题不在功能而在“分层”一、为什么“分层”这么重要一句话总结分层 控制复杂度不分层的结果UI 逻辑 状态 AI 全混在一起导致改一个地方影响全局Bug 难定位无法扩展分层之后UI展示 Service逻辑 Store状态 AgentAI每一层职责清晰。二、推荐分层结构核心在 HarmonyOS 中推荐的游戏架构是componentsUI组件 pages页面 services业务逻辑 store状态管理 models数据模型 agentAI核心关系UI → Service → Store → Agent三、第一层Model数据结构作用定义“游戏世界的数据结构”示例// models/GameModel.etsexportinterfacePlayer{x:numbery:number}exportinterfaceGameState{player:Player score:number}原则只定义结构不写逻辑四、第二层Store状态层作用管理“唯一数据源”示例// store/GameStore.etsimport{GameState}from../models/GameModelexportclassGameStore{state:GameState{player:{x:0,y:0},score:0}update(partial:PartialGameState){this.state{...this.state,...partial}this.notify()}notify(){// 通知 UI 更新简化}}exportconstgameStorenewGameStore()核心原则Single Source of Truth唯一状态源五、第三层Service业务逻辑作用处理“游戏规则”和“操作逻辑”示例// services/GameService.etsimport{gameStore}from../store/GameStoreexportclassGameService{moveLeft(){constplayergameStore.state.player gameStore.update({player:{...player,x:player.x-10}})}addScore(){gameStore.update({score:gameStore.state.score1})}}exportconstgameServicenewGameService()原则不直接操作 UI只操作状态六、第四层ComponentUI 组件作用展示数据示例// components/Player.etsComponentexportstruct Player{Propx:numberPropy:numberbuild(){Image(player.png).position({x:this.x,y:this.y})}}原则UI 不包含业务逻辑七、第五层Page页面层作用组合 UI 调用 Service示例EntryComponentstruct GamePage{StatestategameStore.statebuild(){Column(){Player({x:this.state.player.x,y:this.state.player.y})Text(Score:${this.state.score})Button(←).onClick(()gameService.moveLeft())Button(1).onClick(()gameService.addScore())}}}页面职责展示 调用八、第六层Agent作用负责“决策”示例// agent/EnemyAgent.etsimport{gameStore}from../store/GameStoreexportclassEnemyAgent{decide(){const{player}gameStore.stateif(player.x100){returnmoveRight}returnmoveLeft}act(){constactionthis.decide()if(actionmoveRight){// 更新状态}}}本质Agent 自动玩家 / NPC / AI 系统九、完整调用链把所有层串起来用户点击Button(←).onClick(()gameService.moveLeft())Service 更新状态gameStore.update({...})Store 通知 UIthis.stategameStore.stateUI 自动更新Player({x:this.state.player.x})完整链路UI → Service → Store → UI加上 AIAgent → Store → UI十、为什么这个分层是“正确的”因为它解决了三个核心问题1、复杂度每层只做一件事2、扩展性可以加 AI可以加多端可以加网络3、可维护性Bug 容易定位代码结构清晰十一、常见错误分层错误 1页面写逻辑this.score错误 2UI 直接改状态Statescore错误 3没有 Store状态散落各处。错误 4AI 写在 UI完全不可维护。总结鸿蒙游戏开发的正确分层可以总结为六层Model数据 Store状态 Service逻辑 ComponentUI Page页面 AgentAI核心调用关系UI → Service → Store → UI ↑ Agent最后一句话总结在 HarmonyOS 中写游戏不再是“堆功能”而是“设计分层系统”。而分层做好了你的项目才有可能可扩展可维护可进化AI / 多端否则迟早会变成一个无法继续迭代的“巨型页面文件”。

更多文章