用途:为设计或重构代码提供统一的“深模块”语言与原则,目标是给调用方带来杠杆、给维护者带来局部性、给所有人带来可测试性。
主要能力:定义并统一使用一组术语——模块(任何有接口和实现的东西,刻意与规模无关)、接口(调用方正确使用模块所需知道的一切,含类型签名、不变量、顺序约束、错误模式、必需配置、性能特征)、实现、深度(接口处的杠杆,大量行为藏在小接口后)、接缝(可在不修改该处的情况下改变行为的位置)、适配器、杠杆、局部性。提供深模块与浅模块的对比,以及设计接口时的自问:能否减少方法数、简化参数、隐藏更多复杂度。
原则:深度是接口的属性而非实现的属性;删除测试(删掉模块后复杂度消失即为直通,复杂度在 N 个调用方重现则值得保留);接口即测试面;一个适配器只是假想接缝,两个适配器才是真实接缝,不要引入没有实际变化的接缝。可测试性设计:接受依赖而非创建依赖、返回结果而非产生副作用、缩小表面积。
使用方式:在设计与重构代码时使用这套语言和原则;深化一组模块见 DEEPENING.md(依赖分类、接缝纪律、替换而非分层测试);探索替代接口见 DESIGN-IT-TWICE.md(并行子代理以多种截然不同的方式设计接口,再按深度、局部性、接缝位置比较)。
限制:资料未提供安装命令、平台、收费或价格信息;术语应严格使用,不要用 component、service、API、boundary 替代。