codebase-design
用于设计深模块的共享词汇。当用户想设计或改进一个模块的接口、寻找深化机会、决定接缝放在何处、让代码更可测试或更易于 AI 导航,或当另一个技能需要深模块词汇时使用。
Skill by WenWuZhiDao
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/wenwuzhidao-codebase-design
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/codebase-design
What's inside
- Skill name
codebase-design- Description
- 用于设计深模块的共享词汇。当用户想设计或改进一个模块的接口、寻找深化机会、决定接缝放在何处、让代码更可测试或更易于 AI 导航,或当另一个技能需要深模块词汇时使用。
- License
- MIT
- Instructions
- 111 lines in SKILL.md · view on GitHub
Files (4)
- DEEPENING.md
- DESIGN-IT-TWICE.md
- SKILL.md
- openai.yaml · agents/
SKILL.md (first lines)
# Codebase Design
设计 **深模块(deep modules)**:在一个小接口后托起大量行为,置于一个干净的接缝处,可通过该接口测试。凡是在设计或重构代码之处都使用这套语言和这些原则。目标是给调用方杠杆、给维护者局部性、给所有人可测试性。
## 词汇表
精确使用这些术语——不要用 "component"、"service"、"API" 或 "boundary" 来替代。语言一致正是全部要义。
**Module(模块)** — 任何拥有接口和实现的东西。刻意与规模无关:一个函数、类、包,或跨层的切片。_避免_:unit、component、service。
**Interface(接口)** — 调用方为正确使用模块所必须知道的一切:类型签名,但也包括不变式、顺序约束、错误模式、必需的配置和性能特征。_避免_:API、signature(太窄——它们只指类型层面的表层)。
**Implementation(实现)** — 模块内部的东西,它的代码主体。与 **Adapter(适配器)** 有别:一个东西可以是小适配器带大实现(Postgres 仓库),也可以是大适配器带小实现(内存假件)。当话题是接缝时用 "adapter";否则用 "implementation"。
**Depth(深度)** — 接口处的杠杆:调用方(或测试)每学习一个单位的接口所能施展的行为量。当大量行为坐落于小接口之后时,模块是 **深的**;当接口几乎和实现一样复杂时,是 **浅的**。
**Seam(接缝)** _(Michael Feathers)_ — 一个你无需在该处编辑就能改变行为的地方;模块接口所在的 *位置*。接缝放在何处是它自己的设计决策,与接缝后面放什么有别。_避免_:boundary(与 DDD 的限界上下文重载)。
**Adapter(适配器)** — 在接缝处满足某个接口的具体之物。描述 *角色*(它填哪个槽),而非实质(它内部是什么)。
**Leverage(杠杆)** — 调用方从深度中得到的:每学习一个单位的接口就获得更多能力。一份实现跨 N 个调用点和 M 个测试回本。
**Locality(局部性)** — 维护者从深度中得到的:变化、bug、知识和验证集中在一个地方,而非散布到各调用方。修一次,处处修好。
## 深 vs 浅
**深模块** = 小接口 + 大量实现:
```
┌─────────────────────┐
│ Small Interface │ ← Few methods, simple params
├─────────────────────┤
│ │
│ Deep Implementation│ ← Complex logic hidden
│ │
└─────────────────────┘
```
**浅模块** = 大接口 + 少量实现(避免):
```
┌─────────────────────────────────┐
│ Large Interface │ ← Many methods, complex params
├─────────────────────────────────┤
│ Thin Implementation │ ← Just passes through
└─────────────────────────────────┘
```
设计接口时,问:
- 我能减少方法的数量吗?
- 我能简化参数吗?
- 我能在内部隐藏更多复杂性吗?
## 原则
- **深度是接口的属性,不是实现的属性。** 一个深模块内部可以由小的、可 mock 的、可替换的部件组成——它们只是不属于接口。一个模块可以既有 **内部接缝**(对其实现私有,供它自己的测试使用),也有其接口处的 **外部接缝**。
- **删除测试。** 想象删掉这个模块。如果复杂性消失了,它就是个直通件。如果复杂性在 N 个调用方处重新冒出来,那它就是在挣自己的饭钱。
- **接口就是测试面。** 调用方和测试跨过同一个接缝。如果你想测试接口 *之外* 的东西,那这个模块的形态多半错了。
- **一个适配器意味着一个假想的接缝。两个适配器才意味着一个真实的接缝。** 除非确有东西跨它而变化,否则不要引入接缝。
## 为可测试性而设计
好的接口让测试变得自然:
1. **接收依赖,别创建它们。**
```typescript
// Testable
function processOrder(order, paymentGateway) {}
// Hard to test
function processOrder(order) {
const gateway = new StripeGateway();
}
```
2. **返回结果,别产生副作用。**
```typescript
// Testable
function calculateDiscount(cart): Discount {}
// Hard to test
function applyDiscount(cart): void {
cart.total -= discount;
}
```
3. **小表面积。** 方法越少 = 需要的测试越少。参数越少 = 测试搭建越简单。
## 关系
- 一个 **Module** 恰好有一个 **Interface**(它呈现给调用方和测试的表面)。
- **Depth** 是 **Module** 的属性,相对于其 **Interface** 来衡量。
- **Seam** 是 **Module** 的 **Interface** 所在之处。
- **Adapter** 坐落于一个 **Seam**,并满足其 **Interface**。
- **Depth** 为调用方产生 **Leverage**,为维护者产生 **Locality**。
## 被否决的框定
- **把深度当作实现行数与接口行数之比**(Ousterhout):这会奖励往实现里注水。我们改用深度即杠杆。
- **把 "Interface" 当作 TypeScript 的 `interface` 关键字或一个类的公有方法**:太窄——这里的接口包含调用方必须知道的每一个事实。
- **"Boundary"**:与 DDD 的限界上下文重载。请说 **seam** 或 **interface**。
## 更深入
- **在给定依赖的情况下深化一簇模块** — 见 [DEEPENING.md](DEEPENING.md):依赖类别、接缝准则,以及「替换而非叠加」的测试。
- **探索备选接口** — 见 [DESIGN-IT-TWICE.md](DESIGN-IT-TWICE.md):拉起并行子智能体,用几种根本不同的方式设计接口,然后从深度、局部性和接缝放置上比较。From WenWuZhiDao/mattpocock-skills-zh, MIT.
More from WenWuZhiDao/mattpocock-skills-zh
- 0.612score
git-guardrails-claude-code
WenWuZhiDao
设置 Claude Code 钩子,在危险的 git 命令(push、reset --hard、clean、branch -D 等)执行前将其拦截。当用户想阻止破坏性 git 操作、添加 git 安全钩子,或在 Claude Code 中拦截 git push/reset 时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.607score
setup-pre-commit
WenWuZhiDao
在当前仓库中设置 Husky pre-commit 钩子,配合 lint-staged(Prettier)、类型检查和测试。当用户想添加 pre-commit 钩子、设置 Husky、配置 lint-staged,或在提交时添加格式化/类型检查/测试时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.607score
code-review
WenWuZhiDao
审查自某个固定基点(commit、分支、tag 或 merge-base)以来的改动,沿两条轴进行——标准(代码是否遵循本仓库记录的编码规范?)和规格(代码是否符合源头工单/规格的要求?)。两项审查在并行子 agent 中运行,并把结果并排报告。当用户想审查一个分支、一个 PR、进行中的改动,或要求「审查自 X…
SkillBFreshness: B★ 29Claude Code +9 - 0.606score
diagnosing-bugs
WenWuZhiDao
针对疑难 bug 和性能回归的诊断循环。当用户说「诊断」/「调试这个」,或报告某个东西坏了/抛异常/失败/变慢时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
scaffold-exercises
WenWuZhiDao
创建包含章节、习题、解答和讲解的练习目录结构,并能通过 lint 检查。当用户想搭建练习脚手架、创建练习存根,或新建一个课程章节时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
tdd
WenWuZhiDao
测试驱动开发。当用户想测试先行地构建功能或修复 bug、提到「red-green-refactor」,或想要集成测试时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
wayfinder
WenWuZhiDao
把一大块工作——超出单个 agent 会话所能容纳的量——规划为工单跟踪器上一张由决策工单构成的共享地图,逐个解决它们,直到通往目的地的路径变得清晰。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
prototype
WenWuZhiDao
构建一个用完即弃的原型来回答某个设计问题。当用户想核实一个状态模型或逻辑是否感觉对劲,或者探索某个 UI 该长什么样时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
wizard
WenWuZhiDao
生成一个交互式 bash 向导,引导人类完成只有他们才能执行的步骤。当配置基础设施、设置凭据或 CI 密钥、操作陌生的第三方仪表盘,或执行一次性迁移或切换时使用。不要为 agent 自己就能执行的步骤调用它。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
to-tickets
WenWuZhiDao
把一个计划、规格说明或当前对话拆分成一组曳光弹式工单,每张声明它的阻塞边,发布到所配置的跟踪器——在本地为每张工单一个文件、边以文字形式,或在真实跟踪器上为原生阻塞链接。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
setup-ts-deep-modules
WenWuZhiDao
把 dependency-cruiser 接入一个 TypeScript 仓库,使每个包都成为深模块——实现隐藏在子文件夹里,只能通过其入口文件访问。用户触发。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
migrate-to-shoehorn
WenWuZhiDao
将测试文件中的 `as` 类型断言迁移到 @total-typescript/shoehorn。当用户提到 shoehorn、想替换测试中的 `as`,或需要部分测试数据时使用。
SkillBFreshness: B★ 29Claude Code +9
Signals
- Stars
- 29
- Forks
- 5
- Open issues
- 0
- Last commit (this folder)
- Aug 13, 2026 (2 months ago)
- Last release
- Aug 13, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from WenWuZhiDao
- 0.612score
git-guardrails-claude-code
WenWuZhiDao
设置 Claude Code 钩子,在危险的 git 命令(push、reset --hard、clean、branch -D 等)执行前将其拦截。当用户想阻止破坏性 git 操作、添加 git 安全钩子,或在 Claude Code 中拦截 git push/reset 时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.607score
code-review
WenWuZhiDao
审查自某个固定基点(commit、分支、tag 或 merge-base)以来的改动,沿两条轴进行——标准(代码是否遵循本仓库记录的编码规范?)和规格(代码是否符合源头工单/规格的要求?)。两项审查在并行子 agent 中运行,并把结果并排报告。当用户想审查一个分支、一个 PR、进行中的改动,或要求「审查自 X…
SkillBFreshness: B★ 29Claude Code +9 - 0.607score
setup-pre-commit
WenWuZhiDao
在当前仓库中设置 Husky pre-commit 钩子,配合 lint-staged(Prettier)、类型检查和测试。当用户想添加 pre-commit 钩子、设置 Husky、配置 lint-staged,或在提交时添加格式化/类型检查/测试时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.606score
diagnosing-bugs
WenWuZhiDao
针对疑难 bug 和性能回归的诊断循环。当用户说「诊断」/「调试这个」,或报告某个东西坏了/抛异常/失败/变慢时使用。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
to-tickets
WenWuZhiDao
把一个计划、规格说明或当前对话拆分成一组曳光弹式工单,每张声明它的阻塞边,发布到所配置的跟踪器——在本地为每张工单一个文件、边以文字形式,或在真实跟踪器上为原生阻塞链接。
SkillBFreshness: B★ 29Claude Code +9 - 0.604score
prototype
WenWuZhiDao
构建一个用完即弃的原型来回答某个设计问题。当用户想核实一个状态模型或逻辑是否感觉对劲,或者探索某个 UI 该长什么样时使用。
SkillBFreshness: B★ 29Claude Code +9
Cite this page
codebase-design skill. Agent Mart. https://agentmart.dev/skills/wenwuzhidao-codebase-design (last updated 2026-10-24)