mcpField
A
arc42-section-09

arc42-section-09

github.com/msiccdev开发4541 次安装16 周前更新
代码仓库

关于 arc42-section-09

用于编写 arc42 第 9 节架构决策文档的技能,以 Nygard ADR 为基础记录背景、决策、替代方案和影响。面向架构师,并强调保留决策变更的历史。

主要功能

  1. 01按 Nygard ADR 格式记录决策
  2. 02整理替代方案及取舍
  3. 03关联其他 arc42 章节
  4. 04维护不可变的 ADR 生命周期
  5. 05按详细程度生成文档
  6. 06审阅决策记录的完整性

适用场景

  1. 01记录 Section 4 标记的重大决策
  2. 02说明约束如何促成架构选择
  3. 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 中的决策:实现细节、显而易见的选择、易于逆转的决策、对系统整体没有影响的单组件选择。

然后依次讨论以下决策类别——逐项询问:

  1. 架构风格 — 单体与微服务、事件驱动与请求-响应、分层与六边形等。

  2. 技术栈 — 非显而易见的语言、框架或平台选择,以及存在强有力替代方案的选择。

  3. 数据策略 — 数据库类型、数据所有权模型、CQRS/事件溯源、架构管理方式。

  4. 集成模式 — 系统与外部系统的集成方式,包括同步与异步、API 网关、事件总线等。

  5. 自建还是采购 — 在权衡具有重要影响的情况下,选择自定义构建还是使用第三方服务或库。

  6. 安全方案 — 非显而易见的安全决策:身份验证协议、授权模型、数据驻留。

  7. 其他重要决策 — 还有哪些经过讨论或做出、且对架构产生持久影响的事项?

针对每项已确认的决策,请询问:

  • 需要做出决策的背景或问题是什么?
  • 做出了什么决定?
  • 认真考虑过哪些替代方案?
  • 为什么否决了各个替代方案?
  • 有哪些积极影响?
  • 有哪些负面影响或权衡?
  • 何时做出的决定?参与者有哪些?
  • 该决策目前仍然有效,还是已被取代?

详细程度 — 精简、基本还是详尽?

  • **精简:**仅包含背景、决策和影响
  • **基本:**增加工具包影响区块;评估过替代方案时增加替代方案表
  • **详尽:**在基本版基础上增加利益相关方和验证标准

步骤 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 格式。备选方案表和交叉引用含义块是工具包扩展。

评论

支持 Markdown