命名规则:管理器、系统、处理程序还是服务?
命名规则:管理器、系统、处理程序还是服务?
嘿,这个问题太戳中开发痛点了——命名看起来是小事,但真到模块越堆越多的时候,一个不清晰的名字能把团队坑到怀疑人生!结合我做游戏后端多年的经验,以及看过的国内外大厂游戏项目的命名习惯,给你梳理下这些前缀的典型职责和适用场景,帮你把模块名字起得既自解释又符合行业共识:
Manager:「管家式」的全局资源管理者
- 核心定位:专门负责某一类实体/资源的全生命周期管控——从创建、状态维护到销毁,还要提供全局的访问入口,像个管着一大家子的管家
- 适用场景:你的
UnitManager就是完美的例子!管所有玩家单位的信息、状态同步、实例创建销毁,完全贴合Manager的职责。类似的还有PlayerManager(管玩家账号实例)、ResourceManager(管游戏道具/场景资源的加载释放) - 关键特征:几乎都是单例(全局唯一实例),对外暴露的是「管理接口」(比如
getUnitById()、createNewUnit()),自己不直接做业务逻辑,只负责“守好资源”
System:「流程驱动者」的业务闭环执行者
- 核心定位:聚焦某一类完整的业务逻辑闭环,或者跨模块的流程协调,是“做一件完整的事”的角色
- 适用场景:你的
SaveSystem、UnitActionSystem简直是教科书级的用法!SaveSystem管从触发保存、数据序列化到持久化的全流程;UnitActionSystem处理单位动作的规则校验、执行、结果同步整个链路。System不会去“管东西”,而是“驱动流程走完一件事” - 关键特征:可以依赖Manager获取资源(比如
UnitActionSystem会从UnitManager拿目标单位),但自己专注业务逻辑实现,是业务流程的核心载体
Handler:「事件接线员」的单一请求处理器
- 核心定位:专注于单一类型的事件/请求响应,做“窄而深”的处理,是只负责“接活干活”的接线员,不碰全局状态或全流程
- 适用场景:比如
SkillCastHandler(专门处理技能释放请求的参数校验、合法性判断)、NetworkMessageHandler(解码某一类网络消息并分发到对应模块)。它不会管所有技能的生命周期,只处理“技能被触发”这个即时事件 - 关键特征:通常是无状态的(或仅存当前请求的临时状态),职责极度单一,处理完请求就把结果交出去,自己不留尾巴
Service:「能力提供者」的通用服务封装者
- 核心定位:把某一类可复用的基础能力包装成服务,供内部多个模块甚至外部服务调用,是“提供工具能力”的角色
- 适用场景:比如
DataPersistenceService(把数据库读写、文件存储的能力封装起来,给SaveSystem、PlayerManager等模块调用)、AuthService(提供登录校验、Token生成的通用能力)。如果你的项目是微服务架构,BattleService、ChatService这种跨进程的服务也用这个前缀 - 关键特征:复用性极强,无状态优先,不绑定特定业务流程,只做“能力输出”
给你的小建议
你之前的约定其实已经很接近行业共识了!可以把Handler和Service的规则补进去,形成团队统一的规范:
- 管实体/资源全生命周期 → 用Manager
- 做完整业务流程闭环 → 用System
- 处理单一事件/请求 → 用Handler
- 封装通用可复用能力 → 用Service
最后再啰嗦一句:团队内部的统一约定比硬套行业标准更重要!只要所有人都清楚每个前缀的含义,哪怕你们把Handler叫Processor也没关系。最好把这些规则写到项目wiki或者代码注释里,新人一进来就能get到,避免后期出现“我以为这个Manager是管流程的”这种尴尬~




