Skip to content
Agentmart
Submit a tool

codebase-design

設計深模組的共用詞彙。當使用者想設計或改進模組的介面、找深化的機會、決定接縫放哪裡、讓程式碼更容易測試或對 AI 更容易導覽,或另一個技能需要深模組詞彙時使用。

Skill by shumingyang-opencode

IndexedMIT★ 3
Write a review

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/shumingyang-opencode-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.

We use your email only for this newsletter. Privacy

About

設計深模組的共用詞彙。當使用者想設計或改進模組的介面、找深化的機會、決定接縫放哪裡、讓程式碼更容易測試或對 AI 更容易導覽,或另一個技能需要深模組詞彙時使用。

Use cases: design

No 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. Checked Oct 25, 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)

# 程式碼庫設計

設計**深模組**:小介面背後有大量行為、放在乾淨的接縫上、可以透過那個介面測試。在任何程式碼被設計或重構的地方使用這套語言與這些原則。目標是讓呼叫者獲得槓桿收益、維護者獲得局部性、所有人獲得可測試性。

## 詞彙表

精確使用這些術語——不要替換成「component」「service」「API」或「boundary」。一致的語言就是重點。

**模組**——任何有介面與實作的東西。刻意地與規模無關:一個函式、類別、套件,或橫跨層級的切片。_Avoid_: unit、component、service。

**介面**——呼叫者要正確使用模組所需知道的一切:型別簽名,也包括不變量、順序約束、錯誤模式、必要的設定,與效能特徵。_Avoid_: API、signature(太窄——它們只指型別層級的表面)。

**實作**——模組裡面的東西,它的程式碼本體。與**轉接器**區別:一個東西可以是小轉接器配大實作(Postgres repo),或大轉接器配小實作(記憶體中的假物件)。當主題是接縫時用「轉接器」;其他情況用「實作」。

**深度**——介面上的槓桿收益:呼叫者(或測試)每學習一單位介面所能行使的行為量。當大量行為藏在一個小介面後面時,模組是**深的**;當介面幾乎跟實作一樣複雜時是**淺的**。

**接縫** _(Michael Feathers)_——一個你可以不用在原地編輯就能改變行為的地方;模組介面所在的*位置*。接縫放哪裡本身是一個設計決策,與放在它後面的是什麼是兩回事。_Avoid_: boundary(與 DDD 的 bounded context 過載)。

**轉接器**——在接縫處滿足某個介面的具體東西。描述*角色*(它填補什麼槽位),不是實體(裡面是什麼)。

**槓桿收益**——呼叫者從深度得到的:每學習一單位介面獲得更多能力。一份實作在 N 個呼叫點與 M 個測試之間回本。

**局部性**——維護者從深度得到的:變更、bug、知識與驗證集中在一個地方,而不是散落在呼叫者之間。修一次,處處修好。

## 深 vs 淺

**深模組** = 小介面 + 大量實作:

```
┌─────────────────────┐
│   Small Interface   │  ← Few methods, simple params
├─────────────────────┤
│                     │
│  Deep Implementation│  ← Complex logic hidden
│                     │
└─────────────────────┘
```

**淺模組** = 大介面 + 少許實作(避免):

```
┌─────────────────────────────────┐
│       Large Interface           │  ← Many methods, complex params
├─────────────────────────────────┤
│  Thin Implementation            │  ← Just passes through
└─────────────────────────────────┘
```

設計介面時問:

- 我能減少方法數量嗎?
- 我能簡化參數嗎?
- 我能把更多複雜度藏在裡面嗎?

## 原則

- **深度是介面的屬性,不是實作的屬性。** 深模組可以在內部由小而可模擬、可替換的部件組成——它們只是不是介面的一部分。模組可以同時有**內部接縫**(實作私有、供自己的測試使用)以及位於其介面上的**外部接縫**。
- **刪除測試。** 想像刪掉這個模組。如果複雜度消失,它只是個轉送層。如果複雜度在 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. **小表面積。** 方法更少 = 需要的測試更少。參數更少 = 測試設定更簡單。

## 關係

- 一個**模組**剛好有一個**介面**(它呈現在呼叫者與測試面前的表面)。
- **深度**是**模組**的屬性,相對於它的**介面**來衡量。
- **接縫**是**模組**的**介面**所在之處。
- **轉接器**坐在**接縫**處並滿足**介面**。
- **深度**為呼叫者產生**槓桿收益**、為維護者產生**局部性**。

## 被否決的框架

- **把深度當成實作行數對介面行數的比率**(Ousterhout):獎勵灌水實作。我們改用深度即槓桿收益。
- **把「介面」當成 TypeScript 的 `interface` 關鍵字或類別的公開方法**:太窄——這裡的介面包含呼叫者必須知道的每一件事實。
- **「boundary」**:與 DDD 的 bounded context 過載。說**seam**或**interface**。

## 深入下去

- **考量其相依而深化一個叢集**——見 [DEEPENING.md](DEEPENING.md):相依分類、接縫紀律,以及「取代而不分層」的測試。
- **探索替代介面**——見 [DESIGN-IT-TWICE.md](DESIGN-IT-TWICE.md):並行啟動子代理,用幾種截然不同的方式設計介面,然後在深度、局部性與接縫位置之間比較。

From shumingyang-opencode/mattpocock-skills-zh-tw, MIT.

More from shumingyang-opencode/mattpocock-skills-zh-tw

Signals

Stars
3
Forks
0
Open issues
0
Last commit (this folder)
Oct 7, 2026 (21 days ago)
Last release
Aug 6, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from shumingyang-opencode

Cite this page

codebase-design skill. Agent Mart. https://agentmart.dev/skills/shumingyang-opencode-codebase-design (last updated 2026-10-24)