codebase-design
Installation
SKILL.md
Codebase Design
设计深模块:用小接口隐藏大量行为,把接口放在清晰接缝处,并通过该接口完成测试。在设计或重构代码时使用这些词汇和原则,目标是为调用者提供杠杆、为维护者提供局部性,并让测试自然发生。
使用已加载的 CONTEXT 术语与 RULE。尚未加载则按项目知识协议执行;知识不可用时继续并如实说明。
词汇表
讨论设计时统一使用以下词汇。引用真实代码时保留已有标识和项目术语,不为了统一词汇强行重命名 Service、API、Component 或业务边界。
模块(Module):任何具有接口和实现的结构。它与规模无关,可以是函数、类、包或跨层切片。讨论设计概念时避免用“单元”“组件”或“服务”代替。
接口(Interface):调用者正确使用模块必须知道的全部信息。不只是类型签名,还包括不变量、顺序约束、错误模式、必需配置和性能特征。讨论这一完整表面时避免使用含义更窄的“API”或“签名”。
实现(Implementation):模块内部的代码。它不同于适配器:适配器描述接缝处的角色,实现描述其内部内容。讨论接缝时使用“适配器”,其他情况使用“实现”。
深度(Depth):接口提供的杠杆,即调用者或测试每学习一单位接口能够调用多少行为。大量行为隐藏在小接口后面时模块较深;接口几乎与实现同样复杂时模块较浅。
接缝(Seam)(Michael Feathers):无需在调用位置编辑代码就能改变行为的位置,也是模块接口所在的位置。接缝放在哪里与接口包含什么是两个不同的设计决策。它不同于 DDD 中的业务边界。