用途:在实现、重构、评审或验证游戏玩法逻辑时,强制遵循面向对象与领域驱动设计的工程约束,适用于 C# 和 TypeScript 游戏开发。
主要能力:
- 分层边界。默认划分为 Interface、Application、Domain、Infrastructure 四层,依赖方向为 Interface -> Application -> Domain,Infrastructure 实现 Domain/Application 端口,Domain 不依赖框架或基础设施。禁止 UI、输入、引擎回调或 Controller 直接访问 Repository 或绕过 Application 编排用例;禁止 Domain 暴露原始引擎组件、场景图、渲染或物理 API、ORM、数据库、HTTP;禁止 Entity 调用 Repository。
- 领域模型封装。聚合根维护一致性边界与业务不变量,通过 ApplyDamage、EquipItem、CompleteQuest 等表达玩法意图的方法改变状态;字段、子实体集合、领域事件集合、缓存与策略对象保持私有;不返回内部集合本身,只返回稳定值对象或只读 DTO/快照。值对象不可变、创建时校验、按值比较。Repository 围绕聚合根定义,由 Application Service 调用。Application Service 负责用例编排、事务与端口调用,核心业务决策交给领域模型。
- 公共 API 门槛。公共面只表达业务能力、稳定命令/查询/DTO 及真实生产变体所需接口;不得暴露内部字段、可变集合、缓存、Repository、仅用于断言的中间状态或测试专用成员。新增 API 前需确认是否存在真实生产调用方。
- 交付完整性。不得交付 TODO、占位、stub、假成功返回、吞掉失败或不可运行的空类脚手架。
- 项目特定模式。区分领域语义与引擎语义,不把引擎实体/组件等同于 DDD 实体;运行时输入通过方法或命令参数传入,不放入全局 Context。运行时领域对象为普通类,不继承引擎场景类型,由领域对象持有并驱动窄接口的 View 包装器,包装器内部保存原生节点,操作以位置、朝向、动画、可见性等游戏术语表达,不暴露原始引擎句柄。Context 按层或游戏域组织,作为强类型依赖集合与生命周期持有者,用私有字段和只读属性实现,禁止 Get<T>()、字符串键、字典查找与运行时注册。构造参数分为全局依赖、实例专属依赖和一次性用例输入三类。
- 接口仅用于真实生产变体。单一实现直接使用具体类;未来灵活性和可测试性不足以成为抽接口的理由。
- 测试与验证。不使用 TDD,先实现行为;自动化测试仅允许用于确定性、与引擎无关的叶子逻辑,通过现有公共行为测试,禁止访问私有状态、反射、InternalsVisibleTo、as any、ForTest 成员等;不创建自动化集成、验收、端到端、无头引擎、场景或视觉回归测试,集成验证通过真实引擎入口运行游戏并观察渲染结果、交互、截图/视频、场景树、调试绘制、运行时状态与引擎日志。
语言特定检查:TypeScript 优先 #private,外部 DTO 使用 Readonly 与只读集合,公共 barrel 只导出契约;C# 使用私有字段与受控 private set,编辑器接线用 [SerializeField] private,不因 Inspector 访问而公开游戏状态。
限制:资料未提供安装命令、版本要求、收费方式或运行平台信息。