用途:这是一套代码设计语言与原则,用于在任何设计或重构代码的场合指导模块设计,目标是给调用方带来杠杆(leverage)、给维护者带来局部性(locality)、给所有人带来可测试性。
核心概念:Module(任何有接口和实现的东西,可指函数、类、包或跨层切片,避免用 unit、component、service);Interface(调用方正确使用模块所需知道的一切,包括类型签名、不变量、顺序约束、错误模式、必需配置和性能特征,避免用 API 或 signature);Implementation(模块内部代码,与 Adapter 区分);Depth(接口处的杠杆,即调用方或测试每学一单位接口能触发的行为量,深模块=小接口+大量实现);Seam(Michael Feathers 概念,可在不编辑该处的情况下改变行为的位置,即接口所在处,避免用 boundary);Adapter(在 seam 处满足接口的具体物,描述角色而非内容);Leverage 与 Locality。
设计与判断:设计接口时问能否减少方法数、简化参数、隐藏更多复杂度。删除测试:若删除模块复杂度消失则是直通,若复杂度在 N 个调用方重现则值得保留。接口即测试面,调用方和测试跨同一 seam。一个 adapter 只是假设 seam,两个 adapter 才是真实 seam,不在无变化处引入 seam。
可测试性:接受依赖而不要创建依赖,返回结果而不要产生副作用,缩小表面积(更少方法=更少测试,更少参数=更简单设置)。
关系与拒绝的框架:Module 恰好有一个 Interface;Depth 是相对 Interface 的 Module 属性;Seam 是 Interface 所在处;Adapter 位于 Seam 并满足 Interface;Depth 为调用方产生 Leverage、为维护者产生 Locality。拒绝把 depth 定义为实现行数与接口行数之比(会奖励填充实现),拒绝把 interface 窄化为 TypeScript 关键字或类公开方法,拒绝用 boundary 代替 seam 或 interface。
深入:DEEPENING.md 讲依赖类别、seam 纪律与 replace-don't-layer 测试;DESIGN-IT-TWICE.md 讲用并行子代理以多种截然不同的方式设计接口,再按 depth、locality 和 seam 位置比较。
限制:资料未提供具体命令、安装步骤、收费、平台与效果信息。