ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

architecture-decision-record 仓库指南:一文读懂架构决策记录(ADR)的定义、组成与落地实践

architecture-decision-record 仓库指南:一文读懂架构决策记录(ADR)的定义、组成与落地实践 【免费下载链接】architecture-decision-recordArchitecture decision record (ADR) examples for software planning, IT leadership, and template documentation项目地址https://gitcode.com/gh_mirrors/ar/architecture-decision-record点击查看免费下载架构决策记录Architecture Decision Record简称 ADR是软件工程中记录重要架构决策及其背景与后果的轻量级文档本仓库architecture-decision-record围绕它构建了一整套体系概念定义、起步流程、文件名规范、写作建议、十余种模板与大量实战示例。本文以仓库内 what-is-an-architecture-decision-record 为核心骨架结合仓库源码与配套文档展开读完你将掌握 ADR 的完整概念体系ADR / AD / ADL / ASR / AKM、判断哪些决策值得记录的方法以及从建目录、命名文件到提交入库的完整落地路径。一、核心概念五个缩写一张概念网络1. ADR架构决策记录架构决策记录ADR是一份记录重要架构决策的文档它同时捕获三部分信息决策本身decision做出该决策的上下文context该决策带来的后果consequences。仓库的定位文档locales/en-001/documents/what-is-an-architecture-decision-record/index.md给出的定义是Anarchitecture decision record(ADR) is a document that captures an important architectural decision made along with its context and consequences.这句话点出了 ADR 的本质它不是需求文档、不是设计文档而是一张决策快照——记录当时选了什么、为什么选、选完后会怎样。仓库 locales/en-001/examples/choosing-a-database-technology/index.md 中的示例正是这种三段式结构的直接体现先描述新应用需要可扩展、高性能的数据存取这一 Context再给出采用文档数据库这一 Decision最后列出需要投入学习成本、需校验数据模型契合度等 Consequences。2. AD架构决策架构决策AD是为解决一个重要需求而做出的软件设计选择a software design choice that addresses a significant requirement。注意这里的关键词是significant——只有满足重要需求的设计选择才称得上架构决策日常的样式微调、单个函数的实现细节不属于 AD 的范畴。这与仓库 skills 目录下 architecture-decision-record-skill/SKILL.md 的判定标准一致该 skill 明确建议当决策影响系统结构、外部接口或质量属性且推翻成本高昂/风险大时才值得写 ADR而已被 linter 或风格指南覆盖的一行式风格选择应跳过。3. ADL架构决策日志架构决策日志ADL是某个项目或组织创建并维护的所有 ADR 的集合。单个 ADR 是孤立文档ADL 则是决策的长期账本。当团队持续把新决策追加进同一个目录或文档集时就形成了一条可追溯的决策时间线谁在什么时候、因为什么背景、做了哪个选择、产生了什么后果。这也是仓库把 locales/en-001/examples 和 locales/en-001/templates 分门别类组织成集合的原因——它们本身就是 ADL 思想的仓库级实践。4. ASR架构显著性需求架构显著性需求ASR是对软件系统架构有可度量影响的需求a requirement that has a measurable effect on a software systems architecture。可度量影响是关键判据例如系统须支撑 10 万并发会直接影响架构选型属于 ASR而登录按钮应为蓝色虽影响 UI 却不改变架构不构成 ASR。ADR 的 Context 段落之所以强调解释组织的处境与业务优先级见仓库 suggestions-for-writing-good-adrs/index.md正是因为架构决策本质上是对 ASR 的回应。5. AKM架构知识管理以上所有概念都属于架构知识管理AKM的研究与实践范畴。ADR 是 AKM 的一种具体载体它把散落在个人头脑与会议纪要中的架构知识转变成可检索、可复用、可审计的显式文档资产。6. 缩写速查表缩写全称含义ADArchitecture Decision架构决策满足重要需求的设计选择ADLArchitecture Decision Log架构决策日志项目/组织全部 ADR 的集合ADRArchitecture Decision Record架构决策记录记录决策 上下文 后果的文档AKMArchitecture Knowledge Management架构知识管理ASRArchitecturally-significant Requirement架构显著性需求对架构有可度量影响的需求二、如何开始使用 ADR五个工作区仓库配套文档 how-to-start-using-adrs/index.md 给出了和团队聊什么的五个工作区这是 ADR 落地的方法论骨架1. 决策识别Decision identification评估 AD 的紧急程度与重要性现在必须定还是可以等掌握更多信息后再定借助个人与集体经验以及公认的设计方法与实践来辅助识别理想情况下维护一份决策待办清单decision todo list与产品待办清单互补——避免架构决策被日常开发淹没。2. 决策制定Decision making存在多种决策技术既有通用方法也有软件架构专用方法例如 dialogue mapping 对话映射。需要说明的是群体决策本身仍是活跃的研究课题团队应结合自身情况选择合适的方法。3. 决策落地与执行Decision enactment and enforcementAD 用于软件设计因此必须传达给并取得出资方、开发方、运维方等干系人的认可架构可循的编码风格architecturally evident coding styles与聚焦架构关注点的代码评审是两种相辅相成的实践在软件演进过程中AD 也需要在系统现代化改造时被重新审视。4. 决策共享可选Decision sharing许多 AD 会跨项目重复出现因此过往决策的经验——无论好坏——在采用显式知识管理策略时都是宝贵的可复用资产。5. 决策文档化Decision documentation捕获决策的模板与工具很多敏捷社区有 M. Nygard 的 ADR 实践传统软件工程与架构设计流程则有 IBM UMF 及 CapitalOne 的 Tyree Akerman 提出的表格化布局。仓库的 templates 目录 正是对这些模板的系统收集。三、把 ADR 放进 git最小可落地流程仓库 how-to-start-using-adrs-with-git/index.md 给出了一个三步起步的最小流程适用于典型软件项目第一步为 ADR 文件创建目录$ mkdir adr第二步为每条 ADR 创建一个文本文件例如choose-database.md$ vi choose-database.md第三步写入内容并提交在文件里写入你想记录的任何内容模板参考见仓库 templates然后提交到 git 仓库。这套流程的要点在于ADR 与源码同库、同版本控制、同评审流程因此天然具备可追溯性与不可篡改性。仓库 skills/architecture-decision-record-skill/SKILL.md 还补充了更完整的检索与建目录建议先用git ls-files | grep -iE (^|/)(adr|adrs|decisions?)(/|$)检查项目是否已有adr/或decisions/约定目录若已存在则沿用其命名、格式与编号若不存在默认创建顶层decisions/或adr/目录——该 skill 特别指出有些团队更喜欢decisions/这个命名因为architecture和ADR缩写会让部分贡献者望而却步而decisions能吸引更广泛的记录供应商决策、规划决策、排期决策等。四、文件命名规范让 ADR 目录井然有序仓库 file-name-conventions-for-adrs/index.md 给出了推荐的 ADR 文件名规范规范示例choose-database.mdformat-timestamps.mdmanage-passwords.mdhandle-exceptions.md三条命名原则现在时祈使动词短语例如choose-database.md而非chose-database.md。这能提升可读性并与团队 commit message 的格式保持一致小写 连字符与仓库本身的命名方式一致在可读性与系统可用性之间取得平衡Markdown 扩展名便于轻松格式化与渲染。若项目需要为 ADR 编号skills/architecture-decision-record-skill/SKILL.md 给出了补充约定使用零填充的序号前缀例如0007-choose-database.mdadr-tools 风格是否编号应与项目已有惯例保持一致否则从无编号的现在时文件名开始最简。五、写好 ADR 的四条质量准则仓库 suggestions-for-writing-good-adrs/index.md 定义了好 ADR的特征这是评价任何 ADR 的通用标尺1. 一条好 ADR 应具备的特征Rationale理由解释为什么做出该 AD可包含上下文、各候选方案的优缺点、特性对比、成本/收益讨论等Specific聚焦每条 ADR 只讲一个AD不混杂多个决策Timestamps时间戳标明 ADR 中每一条内容的撰写时间。这对成本、排期、规模等会随时间变化的要素尤其重要Immutable不可变不修改 ADR 中已存在的信息。需要更新时要么追加新信息amend要么新建 ADR 取代旧记录supersede。2. 好的 Context 段应该写什么解释组织的处境与业务优先级包含基于团队人员构成与技能构成的考量和理由列出相关优缺点并用贴合自身需求与目标的语言描述。3. 好的 Consequences 段应该写什么解释做出决策后随之而来的结果影响、产出、后续行动等记录由此触发的后续 ADR——一个大决策往往衍生出多个小决策这是常见现象包含行动后复盘after-action review流程团队常见做法是一个月后回头审视每条 ADR将记录与实际发生的情况对比从中学习成长。4. 新 ADR 取代旧 ADR当某个 AD 取代或否定了之前的 ADR 时应当创建一条新 ADR。仓库的 MADR 模板对此有直接体现decision-record-template-of-the-madr-project/index.md 的 Status 字段专门支持superseded by [ADR-0005]的写法并在 Links 段预留了Refined by [ADR-0005]这类指向关联 ADR 的链接位。六、模板体系从极简到企业级仓库 templates 目录 收集了十余种公开模板覆盖从个人敏捷项目到大型企业的不同场景。这里介绍三种代表性模板1. Michael Nygard 模板最简、最流行源自 decision-record-template-by-michael-nygard/index.md每个 ADR 文件只写四个段落# 标题 ## Status 状态是什么例如 proposed提议、accepted已接受、rejected已拒绝、deprecated已弃用、superseded已被取代等。 ## Context 是什么问题促使我们做出这个决策或变更 ## Decision 我们提议和/或正在做的变更是什么 ## Consequences 因为这个变更哪些事情变得更简单或更困难了2. Jeff Tyree Art Akerman 模板更精细的企业级源自 decision-record-template-by-jeff-tyree-and-art-akerman/index.mdCapital One Financial 出品字段更加完整Issue描述正在解决的架构设计问题不留疑问Decision明确说明架构方向即你选择的位置Status决策状态如 pending / decided / approvedGroup用简单分组integration、presentation、data 等组织决策集Assumptions说明决策环境中的底层假设成本、排期、技术等Constraints记录所选方案可能带来的额外环境约束Positions列出考虑过的所有备选方案尽量详尽避免最终评审时被问你想过……吗Argument说明为什么选中该方案包括实施成本、总体拥有成本、上市时间、所需开发资源可得性等Implications决策带来的连锁影响如引出新决策、产生新需求、需重新谈判范围等Related decisions / requirements / artifacts / principles关联决策、需求、工件与原则Notes决策过程可能持续数周记录社交化过程中的讨论要点。仓库示例 css-framework/index.md 就是这一模板的完整应用它在 Positions 段详细记录了 Semantic UI因 jQuery 依赖过多被否决官方称有 22000 个 jQuery 触点而拒绝做无 jQuery 版本与 Bulma无 jQuery、现代构建的对比并附上两个框架的 HTML 代码片段最后在 Argument 段给出否决结论——堪称理由充分、证据详实的范本。3. MADR 项目模板强调备选方案与利弊权衡源自 decision-record-template-of-the-madr-project/index.md在 Nygard 四段式基础上增加了决策驱动因素、备选方案清单以及每个方案的 Pros and Cons 对比适合决策论证要求较高的场景。七、仓库内的实战示例看真实 ADR 长什么样仓库 examples 目录 提供了 40 个真实 ADR 示例覆盖技术选型、流程规范、组织决策等场景。除了上文提到的数据库选型与 CSS 框架选型还有几个值得研读选择数据库技术在关系型、文档型、事件型三类数据库之间权衡最终基于灵活数据模型 水平扩展 无复杂事务四条理由选择文档数据库Go 编程语言从 Java 迁移到 Go 的完整决策链包含 Context / Decision / Rationale / Implications / Conclusion 五个段落其中 Implications 明列了培训、经验过渡、工具链、无厂商锁定四点持续集成将 CI 落地写成决策记录Consequences 段明确区分正面质量与交付提升、自动化节省成本、协作增强与负面初期投入、人员/工具/流程前置投资、实施中的技术风险snake_case v. camelCase for REST API一个纯规范类决策的范本通过 Decision Drivers 明确驱动因素再逐条论证选择 snake_case 的理由与潜在后果。这些示例的共同模式是每个 ADR 都是一个自洽的决策故事——背景清晰、理由充分、后果明确。它们是检验什么是好 ADR的活教材也是团队内部写新 ADR 时最直接的参考起点。八、小结从概念到实践的完整闭环回到仓库的定义文档what-is-an-architecture-decision-record/index.md其目标是提供 ADR 的快速概览、如何创建 ADR以及到哪里寻找更多信息。对照全文我们可以总结出 ADR 的完整实践闭环理解概念ADR 记录决策 上下文 后果AD 是满足重要需求的设计选择ADL 是所有 ADR 的集合ASR 是驱动 AD 的可度量需求这一切属于 AKM 范畴识别决策与团队讨论决策识别、制定、落地执行、共享与文档化五个工作区判断哪些决策值得记录落地创建mkdir adr→ 按命名规范创建choose-database.md这类文件 → 选择合适模板填写 → 提交 git持续维护遵循具体、时间戳、不可变、充分理由的质量准则用追加或新建 ADR 的方式演进定期复盘。如果想继续深入仓库还提供了三个进阶入口结合工具使用 ADRGoogle Drive、git、Jira、Wiki 等任意载体皆可、团队协作建议decisions命名更受欢迎、实践中活文档式可变更更有效等一线经验以及 决策适配函数fitness functions for decisions as code 这一把决策变成可自动验证代码的前沿方向。仓库根目录的 README.md 与 AGENTS.md 则分别提供了全局导航与贡献维护约定供进一步阅读。赞分享【免费下载链接】architecture-decision-recordArchitecture decision record (ADR) examples for software planning, IT leadership, and template documentation项目地址https://gitcode.com/gh_mirrors/ar/architecture-decision-record点击查看免费下载相关推荐用 ADR 记录 SvelteKit 前端框架选型从架构决策到落地实践architecture-decision-record 仓库实战指南用 ADR 记录 SvelteKit 前端框架选型从架构决策到落地实践architecture decision record 仓库实战指南 导读 本文以ADR 实战用架构决策记录Architecture Decision Record落地持续集成Continuous IntegrationADR 实战用架构决策记录Architecture Decision Record落地持续集成Continuous Integration 导读 本文architecture-decision-record 仓库实战为选用 Vue 前端 JavaScript 库编写一份可落地的架构决策记录ADRarchitecture decision record 仓库实战为选用 Vue 前端 JavaScript 库编写一份可落地的架构决策记录ADR 本上一篇CANN / cannbot-skills Flash Attention性能优化最佳实践下一篇Revel请求参数验证自定义验证规则创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进