Files
mini-openclaw/docs/project-process/03-detailed-design.md
T
2026-09-28 17:02:33 +08:00

5.4 KiB
Raw Blame History

阶段 ③ 详细设计(Detailed Design)

定义:把架构落到可实现的粒度——每个接口的签名与契约、数据结构与迁移、视图状态机、异常处理、边界条件。详细设计完成后,实现者不需要再做任何设计决策,只需照做。 输入:① 规格 + ② 架构(模块边界、owner、契约归属)。 输出:详细设计文档(接口/数据/状态机/异常/边界)+ 可落地的契约声明(类型定义、表结构草案)。 进入下一阶段(④ UI Spec / ⑤ 实现):接口契约与数据契约已定案,边界与异常已覆盖。


1. 要求(Requirements)

1.1 进入条件

  • 架构已定案(无阻塞性未决决策)。
  • 规格的 BR-*/E-*/AC-* 全部可映射到具体接口/数据/状态。

1.2 完成条件(DoD)

  • 每个公开接口(HTTP/SSE端点、函数、模型工具及业务事件)有签名、入参校验规则、返回与错误语义
  • 每个数据结构(表/文件/状态对象)有字段、类型、可空性、owner;变更走追加式迁移且有守卫
  • 每个有状态视图/流程有状态机(状态全集 + 合法转换 + 每个状态的禁用手势)
  • 规格中每条 E-* 都能落到具体错误码 + 处理路径(重试/降级/回滚)
  • 边界条件显式列出:空输入、上限、并发、超时、权限缺失、版本不兼容
  • 所有契约与规格 id 可双向追溯(实现点 ↔ BR/E/AC)

2. 规则(Rules)

编号 规则
R-3.1 契约先行且单一:接口与数据契约在详细设计中定案,实现只落契约不发明契约;跨进程契约只放共享层一处(G-1)。
R-3.2 入参显式校验:每个对外接口(HTTP、文件上传、SQL数据卡参数、模型请求和服务命令)的入参都有校验(类型/枚举/边界),禁止裸用;"无入参"是唯一例外。通用校验器不得被滥用成"非空字符串检查"。
R-3.3 状态机完备:状态全集含加载/空/错误/提交中等"非 happy path"状态;每个状态定义允许的动作与禁用手势。折叠状态机(如把 Loading 与 Submitting 合并成一个布尔)会丢失关键行为,禁止。
R-3.4 异常必有归属:每条失败路径有明确处理语义(重试上限、降级、回滚、幂等)与错误码;静默失败是设计缺陷。
R-3.5 迁移只追加:持久化结构变更只能追加带守卫的迁移(版本号递增 + 幂等守卫),禁止修改历史迁移;迁移只跑一次。
R-3.6 边界显式:空输入、数量上限、并发/竞态、超时、凭据缺失、旧版本兼容等边界条件写成条目,不得留给实现时"顺手处理"。
R-3.7 单实现点:一条规则/一个行为只有一个实现点(继承规格 R-1.3);发现需要多处实现,回到规格拆分。
R-3.8 详细设计可评审:设计文档要能被实现者之外的人评审出"漏了 X 状态/缺了 Y 错误码",否则说明粒度还不够。

3. 输出规范

3.1 详细设计文档结构

1. 范围与本设计覆盖的规格 id     BR-xx / E-xx / AC-xx 清单(双向追溯表)
2. 接口设计                      每个接口:签名 / 入参校验规则 / 返回 / 错误语义 / owner
3. 数据设计                      表/文件/对象:字段、类型、可空性、owner、迁移草案(只追加)
4. 状态机与流程                  有状态视图/流程的状态机表(状态 × 转换 × 动作 × 守卫)
5. 异常与错误码                  错误码表:码 / 触发条件 / 用户可见消息 / 处理路径(重试/降级/回滚/幂等)
6. 边界条件清单                  空输入 / 上限 / 并发 / 超时 / 权限 / 版本兼容
7. 测试映射                      每个 AC-xx 对应的测试点(单测/集成/E2E 层级建议)
8. 未决项                        遗留问题(owner + needed-by),或已解决的决策记录

3.2 契约声明(可落地的部分)

  • 类型定义:新增共享业务契约优先位于 backend/contracts/,由FastAPI请求/响应模型引用;前端同步以已验证的生成物或契约测试为准。当前不存在完整OpenAPI生成流水线,建设前标为待实现。不要顺手重排旧API的所有请求模型。
  • 数据结构草案:DDL/迁移骨架,标注幂等守卫。
  • 状态机表:Markdown 表格即可,复杂流程可配 sequence 图(见 02-architecture.md §3.2)。

3.3 交付物清单

  • 详细设计文档入 docs/v2/ 或相应业务目录,注明草案/定案和所覆盖需求编号。
  • 契约草案(类型/迁移/错误码表)
  • 测试映射表(为 ⑥ 验证做准备)

4. 轻量路径(小改动)

  • 单接口小改:契约 + 边界 + 测试映射合并为设计文档中的 2-3 小节。
  • 触碰共享契约、迁移、状态机、模型工具与数据出口:必须完整走详细设计。

5. 相关文档

变更:XB-1.0 / 2026-09-28,按兴邦 Next.js + FastAPI 项目事实适配;稳定规则编号保留。