You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

命名规则:管理器、系统、处理程序还是服务?

命名规则:管理器、系统、处理程序还是服务?

嘿,这个问题太戳中开发痛点了——命名看起来是小事,但真到模块越堆越多的时候,一个不清晰的名字能把团队坑到怀疑人生!结合我做游戏后端多年的经验,以及看过的国内外大厂游戏项目的命名习惯,给你梳理下这些前缀的典型职责和适用场景,帮你把模块名字起得既自解释又符合行业共识:

Manager:「管家式」的全局资源管理者

  • 核心定位:专门负责某一类实体/资源的全生命周期管控——从创建、状态维护到销毁,还要提供全局的访问入口,像个管着一大家子的管家
  • 适用场景:你的UnitManager就是完美的例子!管所有玩家单位的信息、状态同步、实例创建销毁,完全贴合Manager的职责。类似的还有PlayerManager(管玩家账号实例)、ResourceManager(管游戏道具/场景资源的加载释放)
  • 关键特征:几乎都是单例(全局唯一实例),对外暴露的是「管理接口」(比如getUnitById()createNewUnit()),自己不直接做业务逻辑,只负责“守好资源”

System:「流程驱动者」的业务闭环执行者

  • 核心定位:聚焦某一类完整的业务逻辑闭环,或者跨模块的流程协调,是“做一件完整的事”的角色
  • 适用场景:你的SaveSystemUnitActionSystem简直是教科书级的用法!SaveSystem管从触发保存、数据序列化到持久化的全流程;UnitActionSystem处理单位动作的规则校验、执行、结果同步整个链路。System不会去“管东西”,而是“驱动流程走完一件事”
  • 关键特征:可以依赖Manager获取资源(比如UnitActionSystem会从UnitManager拿目标单位),但自己专注业务逻辑实现,是业务流程的核心载体

Handler:「事件接线员」的单一请求处理器

  • 核心定位:专注于单一类型的事件/请求响应,做“窄而深”的处理,是只负责“接活干活”的接线员,不碰全局状态或全流程
  • 适用场景:比如SkillCastHandler(专门处理技能释放请求的参数校验、合法性判断)、NetworkMessageHandler(解码某一类网络消息并分发到对应模块)。它不会管所有技能的生命周期,只处理“技能被触发”这个即时事件
  • 关键特征:通常是无状态的(或仅存当前请求的临时状态),职责极度单一,处理完请求就把结果交出去,自己不留尾巴

Service:「能力提供者」的通用服务封装者

  • 核心定位:把某一类可复用的基础能力包装成服务,供内部多个模块甚至外部服务调用,是“提供工具能力”的角色
  • 适用场景:比如DataPersistenceService(把数据库读写、文件存储的能力封装起来,给SaveSystemPlayerManager等模块调用)、AuthService(提供登录校验、Token生成的通用能力)。如果你的项目是微服务架构,BattleServiceChatService这种跨进程的服务也用这个前缀
  • 关键特征:复用性极强,无状态优先,不绑定特定业务流程,只做“能力输出”

给你的小建议

你之前的约定其实已经很接近行业共识了!可以把Handler和Service的规则补进去,形成团队统一的规范:

  • 管实体/资源全生命周期 → 用Manager
  • 做完整业务流程闭环 → 用System
  • 处理单一事件/请求 → 用Handler
  • 封装通用可复用能力 → 用Service

最后再啰嗦一句:团队内部的统一约定比硬套行业标准更重要!只要所有人都清楚每个前缀的含义,哪怕你们把Handler叫Processor也没关系。最好把这些规则写到项目wiki或者代码注释里,新人一进来就能get到,避免后期出现“我以为这个Manager是管流程的”这种尴尬~

火山引擎 最新活动