名称: ctx-添加决策 描述: “记录架构决策。当权衡被解决或做出未来会话需要了解的非明显设计选择时使用。” 允许工具: Bash(ctx:*)
在DECISIONS.md中记录一个架构决策。
何时使用
- 在解决备选方案之间的权衡之后
- 当做出非明显的设计选择时
- 当需要保留选择背后的"原因"时
- 当未来会话需要理解为什么某物是现在这个样子时
何时不使用
- 次要的实现细节(改用代码注释)
- 常规维护或错误修复
- 不影响架构的配置更改
- 当没有真正的备选方案可供考虑时
决策格式
快速格式(Y-Statement)
对于轻量级决策,使用单个陈述:
“在**[情境]的背景下,面临[约束],我们决定选择[选择]而非[备选方案],以实现[收益],接受[权衡]**。”
示例:
“在需要CLI框架的背景下,面临Go生态系统选项,我们决定选择Cobra而非urfave/cli,以实现更好的子命令支持,接受其有更多样板代码的事实。”
完整格式
对于重要决策,收集:
- 背景:什么情况促使了此决策?存在什么约束?
- 备选方案:考虑了哪些选项?(至少2个)
- 决策:选择了什么?
- 理由:为什么选择这个而不是备选方案?
- 后果:结果会带来什么变化?(包括积极和消极的)
收集信息
如果用户只提供标题,询问:
- “什么促使了此决策?” → 背景
- “考虑了哪些备选方案?” → 选项
- “为什么选择这个而不是备选方案?” → 理由
- “后果是什么(好的和坏的)?” → 后果
对于快速决策,提供Y-Statement格式。
交叉引用
当一项决策取代较早的决策时:
- 将旧决策标记为"被[新决策]取代"
- 在新决策中引用旧决策
- 捕获原始决策的经验教训
当决策相关时:
- 在后果中注明"另请参阅:[相关决策]"
执行
快速格式:
ctx add decision "使用Cobra作为CLI框架" \
--context "Go项目需要CLI框架" \
--rationale "比urfave/cli有更好的子命令支持,团队熟悉" \
--consequences "更多样板代码,但命令结构更清晰"
完整格式(含备选方案):
ctx add decision "使用PostgreSQL作为主数据库" \
--context "电子商务交易需要ACID兼容的数据库" \
--rationale "PostgreSQL提供JSONB、全文搜索,且团队有经验。选择它而非MySQL(JSON功能较弱)和MongoDB(无多文档ACID)。" \
--consequences "单一数据库处理交易和搜索。团队需要PostgreSQL特定培训。"
质量检查清单
记录前,验证:
- [ ] 背景清晰地解释了问题
- [ ] 至少考虑了一个备选方案
- [ ] 理由说明了为什么拒绝备选方案
- [ ] 后果包括收益和权衡