用途:当 Go 代码已经能运行,但业务规则散落在传输层与持久化层,导致难以信任、测试或扩展时,用该技能把代码重构为行为优先、保护不变量的领域模型。
重构循环:从系统边缘(HTTP handler、gRPC 方法、命令、repository 回调或事务块)找到用例,先用自然语言写下业务操作,再引入新类型;提取条件分支中隐藏的规则,把“if 墙”转化为领域类型上的不变量与行为方法;创建或收紧领域类型,优先用拒绝非法状态的构造函数,外部可变会绕过不变量时优先私有字段,用业务语言命名的行为方法替代 setter;让领域与数据库无关,移除领域包中的 Firestore、SQL、protobuf 或 HTTP 关注点,存储形态与领域形态不同时引入独立持久化模型;重建 repository 边界,接口放在消费方旁边,优先 load、update 等通用能力而非镜像每个业务动作的方法,写入需要事务性读改写时用基于闭包的更新方法;围绕领域添加黑盒测试,测试导出行为而非私有字段,用“可用时段”“已取消训练”等有意义的领域对象辅助函数,领域测试中不引入 mock;收缩旧代码路径,让 handler、service、repository 委托给新领域行为,领域可靠执行后删除重复校验。
护栏:不要凭空发明实体和值对象,除非能澄清真实业务行为;不要把纯传输校验移入领域,除非它是业务规则;不要让数据库事务类型或客户端泄漏进领域;不要因为旧代码使用就保留公开可写字段。
参考:references/domain-rules.md 提供适配本技能包的核心规则;references/refactor-playbook.md 提供分步迁移路径与反模式清单。
交付物:面向行为的领域方法、强制有效性的构造函数或工厂、收窄的 repository 契约、从 handler 或适配器移除的重复业务检查、用业务术语描述行为的聚焦领域测试。