SuperAPI AI 工具集

codebase-design

编程与开发

查看项目

更新于 10-15 22:14

技能介绍

用途:在设计和重构代码时提供统一语言与原则,目标是让小接口背后承载大量行为,接口放在干净的接缝处,并通过该接口进行测试,从而给调用方带来杠杆、给维护者带来局部性、给所有人带来可测试性。

术语:模块指任何有接口和实现的东西,刻意不限定尺度,可以是函数、类、包或跨层切片;接口指调用方正确使用模块所需知道的一切,包括类型签名、不变量、顺序约束、错误模式、必要配置和性能特征;实现指模块内部的代码体,与适配器区分;深度指接口处的杠杆,即调用方或测试每学习一单位接口能驱动的行为量;接缝指可在不编辑该处的情况下改变行为的位置,即模块接口所在之处;适配器指在接缝处满足接口的具体事物。

深与浅:深模块=小接口+大量实现;浅模块=大接口+很少实现,应避免。设计接口时可自问:能否减少方法数量、简化参数、把更多复杂性藏到内部。

原则:深度是接口的属性而非实现的属性;删除测试——想象删掉该模块,若复杂性消失说明只是透传,若复杂性在 N 个调用方重现说明它有价值;接口即测试面,调用方和测试跨越同一接缝;一个适配器意味着假想接缝,两个适配器才是真接缝,没有实际变化就不要引入接缝。

可测试性:接受依赖而非创建依赖,例如 function processOrder(order, paymentGateway) {};返回结果而非产生副作用,例如 function calculateDiscount(cart): Discount {};保持小表面积,方法越少测试越少,参数越少测试搭建越简单。

关系:一个模块恰好有一个接口;深度是相对于接口衡量的模块属性;接缝是模块接口所在之处;适配器位于接缝并满足接口;深度为调用方产生杠杆,为维护者产生局部性。

被拒绝的框架:不以实现行数与接口行数之比定义深度;不把接口窄化为 TypeScript 的 interface 关键字或类的公开方法;不用“边界”一词,避免与 DDD 的有界上下文混淆。

进一步阅读:给定依赖深化一组模块见 DEEPENING.md,探索替代接口见 DESIGN-IT-TWICE.md。

限制:资料未提供价格、平台支持范围或具体安装命令。