该技能的核心主张是:不要将业务领域逻辑分散在大量条件判断中,而应当用与领域匹配的数据结构来表达。结构选对了,非法状态就无法表示,分支也会随之减少;如果在编写代码时就选定结构,成本很低;事后再补做则容易被视作重构而不断推迟。
资料列出的可选结构包括:用状态机替代散落的布尔值、阶段或生命周期检查;用类型化模型替代松散参数或重复的形状假设;用映射、注册表、查找表或可辨识联合替代跨文件的分支;用 reducer 或命令/事件模型替代临时状态变更;用围绕单一领域知识组织的模块替代按加载、校验、转换、保存等执行顺序组织的模块,因为执行顺序不等于所有权;用小的模块边界聚拢重复行为、所有权或不变式;在访问模式需要时使用队列、缓存、索引、图、树或规范化集合;以及其他任何合适的结构。如果都不适合,就先明确代码绝不允许出现什么,以及数据如何被读取,再寻找能精确编码这一点的结构。
同时,资料强调不要强行抽象:如果当前结构已经清晰、局部且不太可能增长,应优先采用简单直白的代码;对那些只增加间接层、却没有消除分支、重复规则、非法状态或生命周期风险的抽象,要保持怀疑。判断是否跳过了这一步的信号是:新功能只是让已有的 if/else 链又多一个分支,或者新增了第二个必须与第一个保持同步的布尔值;按时间阶段分解也是信号之一,即以阶段命名的模块会在各步骤间重复相同的领域规则。当这项工作涉及项目术语、领域关系、不变式或所有权的梳理时,可调用 /domain-modeling,并通过它来统一项目的规范文档。