网罗开发小红书、快手、视频号同名大家好我是展菲目前在上市企业从事人工智能项目研发管理工作平时热衷于分享各种编程领域的软硬技能知识以及前沿技术包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者《ESP32-C3 物联网工程开发实战》图书作者《SwiftUI 入门进阶与实战》超级个体COC上海社区主理人特约讲师大学讲师谷歌亚马逊分享嘉宾科技博主华为HDE/HDG我的博客内容涵盖广泛主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告同时也会提供产品优缺点分析、横向对比并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。展菲您的前沿技术领航员 大家好我是展菲 全网搜索“展菲”即可纵览我在各大平台的知识足迹。 公众号“Swift社区”每周定时推送干货满满的技术长文从新兴框架的剖析到运维实战的复盘助您技术进阶之路畅通无阻。 微信端添加好友“fzhanfei”与我直接交流不管是项目瓶颈的求助还是行业趋势的探讨随时畅所欲言。 最新动态2025 年 3 月 17 日快来加入技术社区一起挖掘技术的无限潜能携手迈向数字化新征程文章目录引言一、为什么不能直接用 fetch页面直接请求问题 1状态绕过 Store问题 2逻辑分散问题 3无法多端同步问题 4无法接入 AI二、正确思路网络层 数据流的一部分三、第一步封装 Network 层基础封装四、第二步引入 Service错误正确示例五、第三步统一进入 Store六、第四步支持多端同步正确方案同步七、第五步支持 AI错误正确AI 触发请求Service 处理八、第六步统一错误处理fetch 分散处理Network 层统一处理Store 统一响应九、完整网络架构十、为什么这个架构是必须的1、可维护性2、可扩展性3、性能优化4、数据一致性十一、常见错误总结引言很多人做鸿蒙游戏时第一反应是fetch(https://api.xxx.com/data)简单、直接、能跑。但只要项目稍微复杂一点你很快就会发现请求到处都是错误处理混乱状态不同步多端直接崩最后你会意识到问题不是 fetch 不好而是你缺少“网络层设计”。在 HarmonyOS 的游戏架构中网络层必须是 Store 体系的一部分而不是工具函数。一、为什么不能直接用 fetch我们先看一个典型“错误写法”。页面直接请求asyncloadData(){constresawaitfetch(/api/score)constdataawaitres.json()this.scoredata.score}看起来没问题但问题非常多问题 1状态绕过 StoreAPI → UIStore 完全失效。问题 2逻辑分散A 页面请求一次B 页面再请求一次无法复用。问题 3无法多端同步手机请求了 TV 不知道问题 4无法接入 AIAI 想用数据怎么办没入口。本质问题一句话总结fetch 是“调用工具”不是“架构方案”。二、正确思路网络层 数据流的一部分在鸿蒙游戏中正确的数据流是UI → Action → Service → Network → Store → UI注意网络请求不能直接改 UI必须进入 Store三、第一步封装 Network 层基础封装// network/HttpClient.etsexportclassHttpClient{asyncget(url:string){constresawaitfetch(url)returnres.json()}}exportconsthttpClientnewHttpClient()目的统一入口可扩展四、第二步引入 Service错误UI→ fetch正确UI→ Service → Network示例// services/ScoreService.etsimport{httpClient}from../network/HttpClientimport{gameStore}from../store/GameStoreexportclassScoreService{asyncfetchScore(){constdataawaithttpClient.get(/api/score)gameStore.dispatch({type:SET_SCORE,payload:data.score})}}exportconstscoreServicenewScoreService()核心网络请求 → 转换成 Action五、第三步统一进入 Storedispatch(action){this.reduce(action)}caseSET_SCORE:this.state.scoreaction.payload数据流变成API → Action → Store → UI六、第四步支持多端同步如果你直接用 fetch每个设备都要请求。正确方案dispatch(action){this.reduce(action)this.syncToDevices(action)}同步syncToDevices(action){distributedSync.send(action)}结果一个设备请求 → 所有设备更新本质同步 Action而不是重复请求七、第五步支持 AIAI 需要数据怎么办错误ai.fetch(/api/score)AI 和系统脱离。正确constscoregameStore.state.scoreAI 直接读 Store。AI 触发请求agent.decide(){return{type:FETCH_SCORE}}Service 处理if(action.typeFETCH_SCORE){scoreService.fetchScore()}本质AI 通过 Action 触发网络八、第六步统一错误处理fetch 分散处理try{}catch{}到处都是。Network 层统一处理asyncget(url:string){try{constresawaitfetch(url)returnres.json()}catch(e){thrownewError(Network Error)}}Store 统一响应caseFETCH_ERROR:this.state.erroraction.payloadUI 统一处理。九、完整网络架构UI ↓ Action ↓ Service ↓ HttpClientfetch封装 ↓ API ↓ Service处理 ↓ Action ↓ Store ↓ UI扩展Store ↓ 多端同步 ↓ 其他设备十、为什么这个架构是必须的1、可维护性所有请求集中在 Service2、可扩展性轻松支持AI多端缓存3、性能优化可以加cache.get(url)4、数据一致性所有设备数据一致十一、常见错误1、UI 直接 fetch架构崩。2、多个地方请求同一接口数据不一致。3、AI 直接请求 API系统割裂。4、不同设备重复请求性能浪费。总结鸿蒙游戏网络层设计的核心结论你不能直接用 fetch是因为它不在数据流里。正确架构是fetch 只是底层工具 Service 才是业务入口 Store 才是数据中心完整链路UI → Action → Service → Network → Store → UI在 HarmonyOS 中这种设计带来的不是“代码规范”而是从“请求数据”升级为“管理数据流”。不用 fetch 的本质不是不用 API而是不让它“绕开系统”。