mcpField
D
design-an-interface

design-an-interface

github.com/vinvcn开发5.4k2.1k 次安装2 天前更新
代码仓库

关于 design-an-interface

design-an-interface 是一项用于探索模块接口设计的技能,面向需要决定模块职责和调用方式的开发者。它并行生成多个差异明显的方案,再比较取舍并综合设计;流程聚焦接口,不实现代码。

主要功能

  1. 01梳理模块需求、调用方与约束
  2. 02并行生成多个不同方案
  3. 03展示接口签名与使用示例
  4. 04比较简洁性、通用性与实现效率
  5. 05讨论取舍并综合设计

适用场景

  1. 01在实现前探索模块 API 方案
  2. 02比较不同调用方所需的接口形状
  3. 03评估接口复杂度与内部实现空间

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vinvcn/mattpocock-skills-zh-cn --skill design-an-interface

安装后在 Claude Code 中输入/design-an-interface确认已加载。

附带文件agents/openai.yaml

详细介绍

设计接口

基于《A Philosophy of Software Design》中的“Design It Twice”:你的第一个想法很可能不是最好的。生成多个根本不同的设计,然后进行比较。

工作流

1. 收集需求

设计前先理解:

  • 这个 module 要解决什么问题?
  • 调用方是谁?(其他 module、外部用户、测试)
  • 关键操作是什么?
  • 有哪些约束?(性能、兼容性、现有模式)
  • 哪些内容应该隐藏在内部,哪些应该公开?

询问:“这个 module 需要做什么?谁会使用它?”

2. 生成设计(并行子 Agent)

使用 Task 工具同时生成 3 个以上的子 Agent。每个子 Agent 都必须产出根本不同的方案。

Prompt template for each sub-agent:

Design an interface for: [module description]

Requirements: [gathered requirements]

Constraints for this design: [assign a different constraint to each agent]
- Agent 1: "Minimize method count - aim for 1-3 methods max"
- Agent 2: "Maximize flexibility - support many use cases"
- Agent 3: "Optimize for the most common case"
- Agent 4: "Take inspiration from [specific paradigm/library]"

Output format:
1. Interface signature (types/methods)
2. Usage example (how caller uses it)
3. What this design hides internally
4. Trade-offs of this approach
3. 展示设计

每个设计展示:

  1. 接口签名 — 类型、方法、参数
  2. 使用示例 — 调用方在实践中如何使用
  3. 隐藏内容 — 保持在内部的复杂性

依次展示设计,让用户能在比较前充分了解每个方案。

4. 比较设计

展示所有设计后,按以下维度比较:

  • 接口简洁性:更少的方法、更简单的参数
  • 通用性与专用性:灵活性与专注度
  • 实现效率:接口形态是否允许高效的内部实现?
  • 深度:小接口隐藏大量复杂性(好)与大接口搭配薄实现(坏)
  • 易于正确使用 与 易于误用

用文字讨论权衡取舍,不用表格。突出设计之间分歧最大的地方。

5. 综合

最好的设计往往会结合多个方案的优点。询问:

  • “哪个设计最适合你的主要使用场景?”
  • “其他设计中是否有值得合并的元素?”

评估标准

来自《A Philosophy of Software Design》:

接口简洁性:更少的方法、更简单的参数 = 更容易学习和正确使用。

通用性:无需改动即可处理未来的使用场景。但要警惕过度泛化。

实现效率:接口形态是否允许高效实现?还是会迫使内部实现变得别扭?

深度:小接口隐藏大量复杂性 = 深模块(好)。大接口搭配薄实现 = 浅模块(应避免)。

反模式

  • 不要让子 Agent 产出相似的设计;要强制要求方案有根本差异
  • 不要跳过比较;价值在于对比
  • 不要实现;这里只讨论接口形态
  • 不要根据实现工作量进行评价

评论

支持 Markdown