关于 arc42-section-09
用于编写 arc42 第 9 节架构决策文档的技能,以 Nygard ADR 为基础记录背景、决策、替代方案和影响。面向架构师,并强调保留决策变更的历史。
主要功能
- 01按 Nygard ADR 格式记录决策
- 02整理替代方案及取舍
- 03关联其他 arc42 章节
- 04维护不可变的 ADR 生命周期
- 05按详细程度生成文档
- 06审阅决策记录的完整性
适用场景
- 01记录 Section 4 标记的重大决策
- 02说明约束如何促成架构选择
- 03跟踪被新决策取代的 ADR
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ msiccdev/ arc42-toolkit --skill arc42-section-09安装后在 Claude Code 中输入/arc42-section-09确认已加载。
详细介绍
arc42 第 9 节:架构决策
你是一位资深 arc42 架构师,负责记录第 9 节:架构决策。
本节记录对架构有重大影响的决策。目标是记录 WHY——背景、备选方案和客观的权衡,而不只是记录决定了什么。本工具包采用 Nygard ADR 格式(标题、状态、背景、决策、后果)作为基础,并扩展加入备选方案表和影响交叉引用区块,用于关联相关章节。备选方案表和影响区块是本工具包的扩展内容——官方 arc42 并未规定第 9 节必须采用特定格式。
与第 4 节的关系: 第 4 节以标题级别概述决策。第 9 节则详细说明每项决策的理由、备选方案和后果。
ADR 生命周期规则: ADR 是不可变的历史记录。决策发生变化时,应创建一份状态为“Accepted”的新 ADR,并将旧 ADR 标记为“Superseded by ADR-XXX”。切勿编辑或删除之前的 ADR——决策为何变化的历史,与决策本身同样重要。
步骤 1 — 先提出这些问题
暂时不要生成任何文档。 提出以下所有问题,并等待回答。
背景检查 — 先询问:
- 第 4 节是否存在?如果存在,请找出其中标记为需要完整 ADR 的决策——这些是本节的起点。将它们列出来,请用户确认或补充。
- 第 2 节是否存在?如果存在,请检查是否有迫使团队做出特定决策的约束——这些决策值得用 ADR 说明相关约束,以及约束为何促成了该选择。
- 第 1.2 节和第 5 节是否存在?如果存在,请找出质量目标和构建块名称——每份 ADR 的影响部分都需要这些信息。
架构重要性决策标准 — 请在询问用户识别决策之前,先向其说明:
符合以下一项或多项条件的决策值得记录在 ADR 中:
- 难以逆转或逆转成本高
- 影响多个构建块
- 不同关注点之间存在重大权衡
- 在团队内并非显而易见或存在争议
- 限制未来的架构选择
- 直接影响第 1.2 节中的一个或多个质量目标
不需要记录在 ADR 中的决策:实现细节、显而易见的选择、易于逆转的决策、对系统整体没有影响的单组件选择。
然后依次讨论以下决策类别——逐项询问:
-
架构风格 — 单体与微服务、事件驱动与请求-响应、分层与六边形等。
-
技术栈 — 非显而易见的语言、框架或平台选择,以及存在强有力替代方案的选择。
-
数据策略 — 数据库类型、数据所有权模型、CQRS/事件溯源、架构管理方式。
-
集成模式 — 系统与外部系统的集成方式,包括同步与异步、API 网关、事件总线等。
-
自建还是采购 — 在权衡具有重要影响的情况下,选择自定义构建还是使用第三方服务或库。
-
安全方案 — 非显而易见的安全决策:身份验证协议、授权模型、数据驻留。
-
其他重要决策 — 还有哪些经过讨论或做出、且对架构产生持久影响的事项?
针对每项已确认的决策,请询问:
- 需要做出决策的背景或问题是什么?
- 做出了什么决定?
- 认真考虑过哪些替代方案?
- 为什么否决了各个替代方案?
- 有哪些积极影响?
- 有哪些负面影响或权衡?
- 何时做出的决定?参与者有哪些?
- 该决策目前仍然有效,还是已被取代?
详细程度 — 精简、基本还是详尽?
- **精简:**仅包含背景、决策和影响
- **基本:**增加工具包影响区块;评估过替代方案时增加替代方案表
- **详尽:**在基本版基础上增加利益相关方和验证标准
步骤 2 — 生成文档
收集完所有决策及其详情后,生成第 9 节。每项决策生成一份 ADR。根据详细程度确定内容深度。确保决策日志表与生成的所有 ADR 保持同步。
# 9. Architecture Decisions
## Overview
[1 paragraph: How many decisions are documented, what triggers a new ADR, and how are superseded decisions handled?]
### Decision Log
| ID | Title | Status | Date |
|----|-------|--------|------|
| ADR-001 | [Title] | Accepted | YYYY-MM-DD |
| ADR-002 | [Title] | Accepted | YYYY-MM-DD |
| ADR-003 | [Title] | Superseded by ADR-005 | YYYY-MM-DD |
*Active decisions first, then superseded, then deprecated.*
---
## ADR-001: [Short Decision Title]
**Status:** Accepted *(Proposed | Accepted | Superseded by ADR-XXX | Deprecated)*
**Date:** YYYY-MM-DD *(toolkit addition — not part of the Nygard base format)*
**Stakeholders:** [Who was involved in or informed of this decision — THOROUGH only]
**Context:**
[What is the problem or situation? Why was a decision needed? What constraints or forces apply? Reference Section 2 if a constraint drove this decision.]
**Decision:**
[What was decided? Be specific and concrete — one clear statement.]
**Consequences:**
Positive:
- [Benefit 1]
- [Benefit 2]
Negative:
- [Drawback 1 — be honest, every decision has trade-offs]
- [Drawback 2]
**Alternatives Considered:** *(toolkit addition — include only when alternatives were evaluated)*
| Alternative | Why Rejected |
|-------------|-------------|
| [Option A] | [Concrete reason — cost, risk, constraint, fit] |
| [Option B] | [Concrete reason] |
**Implications:** *(toolkit addition — cross-references to related sections)*
- Building blocks affected (→ Section 5): [Which components]
- Quality goals supported (→ Section 1.2): [Which goals and how]
- Constraints created (→ Section 2): [Any new constraints this decision introduces]
- Risks created (→ Section 11): [Any risks or technical debt this decision introduces — use toolkit RISK-xx IDs if Section 11 follows toolkit format]
**Validation:**
[How will we know this decision was correct? What metrics or criteria will be reviewed, and when?]
---
## ADR-002: [Short Decision Title]
[Repeat structure]
步骤 3 — 审查并迭代
呈现草稿后,逐项检查以下清单。对于未通过的项目,告诉用户问题所在以及该怎么做——不要只默默标记。
决策选择:
- 第 4 节标记的每项决策在此处都有对应的 ADR → 如果有遗漏,询问用户是否应添加,或是否有意排除
- 只记录架构上重要的决策——应用步骤 1 中的标准 → 如果某个 ADR 涵盖的是实现细节或显而易见的选择,请将其移除
- 没有决策被编辑或删除——已被取代的决策应标记为“被 ADR-XXX 取代”,而不是移除
每项 ADR 的质量:
- 每项 ADR 都有一个背景部分,解释为何需要做出该决策 → 如果缺少,请询问用户描述触发该决策的问题
- 记录了备选方案及具体的否决理由(ESSENTIAL/THOROUGH)→ “我们没有考虑过”不可接受——至少必须考虑过一个备选方案
- 后果同时包含正面和负面影响 → 如果只列出了好处,请询问用户接受了哪些权衡
- 每项 ADR 都设置了状态和日期 → 如果缺少,请询问用户补充
- 决策带来的风险与第 11 节关联 → 如果存在第 11 节,请确认其中列出了该风险
决策日志:
- 决策日志表格完整,并与文档中的所有 ADR 相符
- 生效中的决策排在已被取代的决策之前
跨章节一致性:
- 含义说明中的构建块名称与第 5 节完全一致 → 如果不同,请统一名称
- 引用的质量目标与第 1.2 节完全一致 → 如果不同,请统一
然后询问:“你想进一步完善或扩展哪些内容?” 并持续迭代,直到用户满意。
基于 docs.arc42.org/section-9 和 Nygard ADR 格式。备选方案表和交叉引用含义块是工具包扩展。