Files
2026-07-13 21:37:01 +08:00

3.3 KiB

name, description
name description
api-shape-explorer 使用并行子代理为一个模块生成多个截然不同的接口设计方案。当用户想要设计 API、探索接口选项、比较模块形态或提到「设计两次」时使用。

设计接口

基于《软件设计哲学》中的「设计两次」原则:你的第一个想法不太可能最好。生成多个截然不同的设计方案,然后进行比较。

工作流程

1. 收集需求

在设计之前,了解以下内容:

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

询问:「这个模块需要做什么?谁会使用它?」

2. 生成设计方案(并行子代理)

使用 Task 工具同时启动 3 个以上的子代理。每个代理必须提出一种截然不同的方案。

每个子代理的提示模板:

为以下内容设计接口:[模块描述]

需求:[收集到的需求]

该设计的约束条件:[为每个代理分配不同的约束条件]
- 代理 1:「最小化方法数量——目标最多 1-3 个方法」
- 代理 2:「最大化灵活性——支持多种使用场景」
- 代理 3:「针对最常见的情况进行优化」
- 代理 4:「借鉴[特定范式/库]的灵感」

输出格式:
1. 接口签名(类型/方法)
2. 使用示例(调用方如何使用)
3. 该设计在内部隐藏了什么
4. 该方法的权衡取舍

### 3. 展示设计方案

展示每个设计,内容包括:

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

按顺序展示设计方案,以便用户在比较之前能充分理解每种方案。

### 4. 比较设计方案

展示所有设计方案后,从以下几个方面进行比较:

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

用散文而非表格讨论权衡取舍。突出各个设计方案之间分歧最大的地方。

### 5. 综合提炼

通常最好的设计方案融合了多个选项的见解。询问:

- 「哪个设计最符合你的主要使用场景?」
- 「其他设计中是否有值得借鉴的元素?」

## 评估标准

摘自《软件设计哲学》:

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

**通用性**:能够在不改动的情况下处理未来使用场景。但要注意过度泛化。

**实现效率**:接口形态是否允许高效的实现?还是会迫使内部结构变得笨拙?

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

## 反模式

- 不要让子代理产生相似的设计方案——要强制它们截然不同
- 不要跳过比较环节——价值在于对比
- 不要实现——这纯粹是关于接口形态的设计
- 不要根据实现工作量来评估