ADR 与演进式架构

共 22 题
📑 题目列表 22 题
#
★★★

1. 决策影响范围(Impact Assessment)的真实评估方法

决策影响范围(Impact Assessment)的真实评估方法是什么?

  • 影响范围评估的维度
  • 影响面与受影响的系统
  • 评估方法与沟通

决策影响范围(Impact Assessment)的真实评估方法,是在做出架构决策前系统评估其波及范围,核心维度包括:受影响的系统与模块(哪些服务、组件、接口会被改)、受影响的团队与角色(哪些团队需要协调)、数据与契约影响(schema、数据流、SLA 是否变化)、运行时与运营影响(性能、可用性、可观测性)、以及成本与时间影响。评估方法包括:依赖图分析(找出受影响的下游)、调用关系梳理、数据流追踪、与相关团队确认边界、以及用"影响矩阵"检查变更的传播范围。真实经验是:影响评估要"早做、广查、确认式",不能只凭开发者的直觉,尤其要关注跨模块、跨团队、跨系统的隐性影响,并让受影响方参与确认,避免"改了 A 却炸了 B"。

影响评估是"决策前看清波及面"的工程动作,核心是查依赖、查数据、查契约、查团队,并用确认式沟通把隐性影响暴露出来。

#
★★★

2. 架构决策文化(Decision Culture)的真实建设路径

架构决策文化(Decision Culture)的真实建设路径是什么?

  • 决策文化的要素
  • 决策透明与记录
  • 责任与参与的平衡

架构决策文化(Decision Culture)的真实建设路径,是让团队形成"决策有依据、有记录、可追溯、可挑战"的集体习惯。建设要点包括:一是鼓励"决策记录化",用 ADR 等方式把每个重要决策的背景、权衡与结论写下来,让决策"可审阅、可复盘";二是建立"知情决策"机制,让决策尽可能有数据与备选方案支撑,而非拍脑袋;三是营造"可安全挑战"的氛围,让成员能对决策提出异议而不担心后果,同时明确"最终责任"归属;四是区分"决策事项"与"执行事项",避免事事都要决策、或者关键决策无人负责。真实路径是"先有记录、再有审阅、最后形成文化"——从把决策写下来开始,逐步建立透明、可追溯、可挑战的决策习惯。

决策文化是"透明 + 可追溯 + 可挑战"的集体习惯,建设路径是从记录化起步,让决策有据可查、可被审阅与挑战。

#
★★★

3. ADR 的标准结构与真实使用经验

ADR(架构决策记录)的标准结构与真实使用经验是什么?

  • ADR 的标准结构
  • 使用场景与价值
  • 维护与时效

ADR(Architecture Decision Record)的标准结构通常包括:标题(决策的简短陈述)、状态(Proposed/Accepted/Deprecated 等)、背景(为什么需要做决策)、决策(最终选择)、备选方案(考虑过的其他方案及为何放弃)、后果(决策带来的影响与权衡)、以及可选的回滚条件。真实使用经验是:ADR 的价值在"记录决策的上下文与理由",让后来者能理解"为什么这么做",而不仅是"做了什么";它应"轻量、及时、聚焦",在决策做出时即记录,避免事后补写失真;ADR 不需要过度冗长,应聚焦关键权衡与理由。真实经验还包括:ADR 要纳入评审与版本管理,且处于"Deprecated"状态的旧决策需要被识别,避免被不明就里地沿用过期决策。

ADR 的核心是"记录决策的理由与上下文"而非形式,标准结构保证可读性,真实价值在"让后来者读懂为什么"并保持时效。

#
★★★

4. 决策可逆性(Reversibility)评估的真实工程方法

决策可逆性(Reversibility)评估的真实工程方法是什么?

  • 可逆性与不可逆性分类
  • 评估维度
  • 为不可逆决策减风险

决策可逆性(Reversibility)评估的真实工程方法,是在决策前判断"这个决策能不能回转、回转成本多大",从而为不同决策采取不同的谨慎程度。评估维度包括:回转的难度(改回去要改多少代码、数据、依赖)、回转的成本(时间、迁移、停机)、以及不可逆性来源(数据迁移不可逆、外部契约固化、依赖锁定、团队/组织承诺)。工程方法上,把决策分为"可轻松回退"与"不可逆/难回退"两级:对可逆决策可以快速做出、迭代修正;对不可逆决策要放慢、充分论证、增加缓解措施(如并行方案、数据保留、回滚预案)。真实经验是:识别不可逆决策并为其"预留回退通道",能显著降低决策风险,这比"追求每次都正确"更务实。

可逆性评估的关键是"区分可逆与不可逆决策并差异化处理",为不可逆决策预留回退通道,是降低风险而非追求完美决策。

#
★★★

5. 决策状态(Proposed/Accepted/Deprecated)的真实生命周期

决策状态(Proposed/Accepted/Deprecated)的真实生命周期是什么?

  • 状态定义
  • 状态流转与触发
  • 生命周期维护

决策状态(Proposed/Accepted/Deprecated)的真实生命周期描述了一个架构决策从提出到被采纳再到被弃用的完整过程。状态包括:Proposed(提出,尚未被采纳,处于讨论评估中)、Accepted(已采纳,当前生效,团队按此实施)、Superseded(已被新决策取代,但仍可能被引用)、Deprecated(已弃用,不再推荐使用,需迁移离开)。真实生命周期管理的关键是:状态要"明确、及时更新、有据可查"——决策被采纳后应从 Proposed 更新为 Accepted,被新决策推翻时应标注 Superseded/Deprecated 并指向新决策。真实经验是:状态管理让决策库"可检索、可追溯",避免团队误用已失效的决策;同时要有人负责维护状态,防止决策库与实际情况脱节、出现"僵尸决策"。

决策状态是"决策有效性的生命周期标记",生命周期管理的核心是及时更新状态、标注替代关系,避免过期决策被误用。

#
★★★

6. ADR 工具链如何把架构决策结构化沉淀并纳入评审,ADR 的时效维护与检索成本如何控制?

ADR 工具链如何把架构决策结构化沉淀并纳入评审,ADR 的时效维护与检索成本如何控制?

  • ADR 工具链的结构化沉淀
  • 评审纳入
  • 时效维护与检索成本控制

ADR 工具链的价值在于把架构决策"结构化沉淀、可检索、可评审"。实现上,ADR 通常以 Markdown 文件形式存放在"代码库即文档"的目录中(如 docs/adr/),配合索引文件(index/README)列出所有 ADR 及其状态,利用版本管理实现变更追踪与可追溯性;工具链可把 ADR 纳入代码评审流程(与代码一起 PR 评审)、支持状态检索与生命周期管理。真实使用时,时效维护与检索成本控制是关键难点:ADR 会随时间与决策演进而积累,若不维护会出现"过期决策、相互矛盾、无法检索"。控制方法包括:规定 ADR 必须登记到索引、及时更新状态、定期复审(识别过时决策)、用约定目录结构与命名保证可检索、并避免"重复决策"(查索引先看是否已有决策)。核心是"让 ADR 有结构、有索引、有评审、有复审",把维护成本控制在可接受范围。

ADR 工具链的落地关键在"结构化 + 索引 + 评审 + 复审",时效维护靠状态更新与定期复审,检索成本靠约定目录与索引控制。

#
★★★

7. 架构决策的轻量化方法(Memos)的真实使用

架构决策的轻量化方法(Memos)的真实使用是什么?

  • 轻量化记事的价值
  • 与正式 ADR 的区分
  • 使用场景

架构决策的轻量化方法(Memos,即简短决策备忘)用于记录那些"重要但不需要完整 ADR 流程"的决策。它比正式 ADR 更轻快,通常只是一段简短记录,说明"做了什么决定、为什么、时间、决策人",不追求完整结构。真实使用价值在于:避免团队为每一个小决策都走繁琐的 ADR 流程,从而满足"重要决策有记录"的需求,同时保持低成本。使用场景包括:技术选型的分支说明、约定调整、临时方案的说明、以及在正式 ADR 前先以 Memo 沉淀共识。真实使用经验是:Memos 与 ADR 形成"轻重结合"——正式 ADR 记录重大、影响广泛的决策,Memos 记录轻量、局部的决策,二者共同构成决策记录体系,避免"要么不记录、要么过度记录"。

Memos 是"轻量决策记录"的补充,与 ADR 形成轻重搭配,让重要决策有记录而不被流程束缚,兼顾完整性与成本。

#
★★★

8. 架构宪章(Architecture Constitution)的真实工程价值

架构宪章(Architecture Constitution)的真实工程价值是什么?

  • 架构宪章的定义
  • 关键约束与原则
  • 价值与治理

架构宪章(Architecture Constitution)是团队/组织对"必须遵守的架构关键约束与原则"的正式约定,通常包括:核心技术选型、强制架构模式、标准与规范、禁止事项(如禁止反向依赖、禁止直接访问数据源)、以及质量目标。它的真实工程价值在于:把"架构意图"转化为"可执行的约束",告诉团队"哪些是必须遵守的底线、哪些是允许的自由",从而在保持架构一致性的同时给团队留出实现自由。价值体现:一是防止架构漂移,让不同团队遵循统一的关键约束;二是降低决策成本,让团队在框架内做局部决策而无须事事上报;三是作为架构评审与门禁的依据。真实经验是:宪章要"少而精、聚焦关键约束",过多的条条框框会扼杀灵活性,且要定期审视与演进,避免过时。

架构宪章把"架构意图"固化为"关键约束",价值在"用底线约束保一致性、用框架内自由降决策成本",关键要精炼且演进。

#
★★

9. 演进式架构(Evolutionary Architecture)的真实工程边界

演进式架构(Evolutionary Architecture)的真实工程边界是什么?

  • 演进式架构的理念
  • 适用与不适用场景
  • 适应度函数与权衡

演进式架构(Evolutionary Architecture)的真实工程边界在于:它主张系统应能"在演进中保持关键架构属性",通过适应度函数(Fitness Function)持续验证架构是否满足约束,从而支持系统渐进式演进而非一次性重写。它的价值在于:让架构能"随业务变化而演进",避免架构僵化。但真实边界在于:演进式架构依赖"清晰的架构属性 + 可自动化的适应度函数",并非所有架构都容易这样度量;对结构化不停变化的系统,演进式架构可能让架构缺乏稳定性;同时,它需要团队具备持续重构与自动化验证的能力,否则"演进"会退化为"混乱蔓延"。因此,演进式架构适合"业务多变、需要持续演进"的系统,且需要明确"哪些是关键约束必须守住、哪些可以演进",并投入适应度函数与自动化验证。

演进式架构是"在演进中守住关键约束"的方法,边界取决于"能否明确并自动验证关键架构属性",它需要能力与纪律支撑。

#
★★

10. 好 ADR 应包含上下文、决策、备选方案、后果与回滚条件,团队如何评审 ADR 使其不沦为形式文档?

好 ADR 应包含上下文、决策、备选方案、后果与回滚条件,团队应如何评审 ADR 使其不沦为形式文档?

  • 好 ADR 的要素
  • 评审 ADR 的方法
  • 避免形式化

好 ADR 应包含几个关键要素:上下文(为什么需要这个决策)、决策(最终选择)、备选方案(考虑过哪些方案及为何放弃)、后果(决策带来的影响与权衡)、以及回滚条件(何时、如何回退)。要让 ADR 不沦为形式文档,团队应把 ADR 评审当作"实质的技术对话"而非"走流程":评审时关注"上下文是否真实、备选方案是否充分、权衡是否经得起质疑、后果是否被理解",而不是只检查格式。落地方法包括:让 ADR 与代码走同样的评审流程(PR 评审、有实质反馈)、要求决策人有足够能力为其决策辩护、把"备选方案为什么被否"作为评审重点、并让 ADR 关联到可验证的成果(如适应度函数、后续实现)。真实经验是,ADR 的价值在于"经得起质疑的决策",评审的目的是打磨决策质量而非通过形式。

ADR 质量门禁的关键是"评审实质而非形式",把备选方案、权衡与后果作为评审重点,让 ADR 成为可被挑战的决策记录。

#
★★

11. 适应度函数(Fitness Function)的真实实施经验

适应度函数(Fitness Function)的真实实施经验是什么?

  • 适应度函数的定义
  • 实施类型与方式
  • 落地经验与成本

适应度函数(Fitness Function)是"对架构属性进行量化/自动化验证的机制",用于持续检查架构是否满足关键约束(如性能、依赖方向、模块化、技术债、安全)。真实实施经验包括:一是类型多样,可分为原子式(单元/集成测试验证)、整体式(全系统检查)、时间式(定时扫描)、触发式(事件触发)等,团队应按需选择;二是偏向"尽早、低成本、自动化",适应度函数应尽可能轻量、集成到 CI 中,避免变成重量级负担;三是"聚焦关键约束",不必为所有属性都建适应度函数,只对真正重要的架构属性建立;四是"随架构演进",适应度函数本身也需要维护与退役。真实经验是,适应度函数的价值在于"把架构约束变成可自动验证的门禁",让架构漂移在早期被发现,但要注意避免过度建设与维护成本。

适应度函数把"架构约束"转化为"可自动验证的检查",实施关键在聚焦关键约束、轻量自动化、随演进维护,避免过度建设。

#
★★

12. 不可逆架构决策(Irreversible Decision)的真实识别方法

不可逆架构决策(Irreversible Decision)的真实识别方法是什么?

  • 不可逆决策的特征
  • 识别维度
  • 应对策略

不可逆架构决策(Irreversible Decision)的真实识别方法,是判断某个决策"很难或无法回转"的特征。识别维度包括:数据不可逆(数据迁移、数据丢失、数据重清洗成本极高)、契约不可逆(对外 API/契约固化,被外部依赖,改动的成本与影响巨大)、技术/依赖锁定(选择了难替换的技术栈、供应商或平台,形成锁定)、以及组织/承诺不可逆(涉及团队结构、长期承诺)。真实的识别方法还包括:做"回退演练"式推演,问"如果这个决策错了,要花多大代价、多长时间能回到原状",从而把决策分成"高不可逆/低不可逆"。应对策略是:对高不可逆决策采取更谨慎的流程(充分论证、试点、并行、预留回退通道),对低可逆决策快速决策迭代。真实经验是"先识别不可逆程度,再决定决策的谨慎程度"。

不可逆决策的识别核心是"回退成本与难度",数据、契约、依赖、组织是主要不可逆来源,识别后应差异化处理并预留回退通道。

#
★★

13. 依赖收敛在构建一致性上的收益与升级约束,如何平衡收敛与版本演进自由度?

依赖收敛在构建一致性上的收益与升级约束是什么,如何平衡收敛与版本演进自由度?

  • 依赖收敛的收益
  • 收敛带来的升级约束
  • 收敛与自由度的平衡

依赖收敛(Dependency Convergence)指让系统各模块使用一致的依赖版本,其收益是"构建一致性":避免同一依赖多版本并存导致的冲突、行为不一致、构建复杂度与安全漏扫遗漏,从而提升可维护性与可复现性。但收敛也会带来约束:更强的版本统一约束限制了各模块独立升级的自由度,某模块想提前升级会被收敛策略阻碍,且可能造成"升级所有模块"的高成本。真实平衡方法包括:对"高频变更、安全敏感"的依赖加强收敛(统一版本、统一升级),对"低频、独立、局部"的依赖允许适度版本差异;用工具(依赖图、版本扫描)监控收敛度;在收敛与演进间设定"分层策略"——核心底座强制收敛,边缘模块允许按需演进。核心是"按依赖风险与变更频率分层决定收敛强度",而非一刀切。

收敛与自由度的平衡是"按依赖特性分层"——高风险/高频率依赖强收敛,低风险/局部依赖留自由度,用工具监控收敛度。

#
★★

14. 关键路径(Critical Path)分析的真实工程方法

关键路径(Critical Path)分析的真实工程方法是什么?

  • 关键路径的定义
  • 分析方法
  • 对关键路径的优化

关键路径(Critical Path)分析在系统工程中指识别"决定整体交付或链路时长的最长依赖链",在架构与工程中常用于理解:系统依赖图中决定端到端链路的关键环节、以及项目交付中决定工期的关键任务序列。真实工程方法包括:一是构建依赖图与调用链,梳理出从入口到出口的必经路径及各自耗时/风险;二是识别"关键路径"——即耗时最长、风险最高、无法绕开的链,它决定整体性能或交付下限;三是对关键路径做优化(减延迟、降风险、加冗余、并行化)与重点监控。真实经验是:关键路径分析的价值在于"聚焦瓶颈与风险源",让团队把资源投在最影响整体结果的环节,而非均摊;同时要理解"关键路径会随变化而转移",需动态更新。在性能上,关键路径常指用户请求链路上最慢且不可绕过的环节。

关键路径分析是"找到决定整体结果的最长风险链并聚焦优化",价值在资源聚焦与瓶颈识别,且需随变化动态更新。

#
★★

15. 系统依赖图(Dependency Graph)的真实可观测实现

系统依赖图(Dependency Graph)的真实可观测实现是什么?

  • 依赖图的构建
  • 可观测性实现
  • 数据来源与更新

系统依赖图(Dependency Graph)的真实可观测实现,是让团队能"实时看到系统组件/服务之间的依赖关系与运行状态"。实现方式包括:一是静态依赖图的构建,通过代码分析(包/模块依赖、函数调用)或声明文件(如部署清单、服务拓扑)生成依赖关系;二是动态可观测数据,通过链路追踪(trace)、服务调用监控、指标采集,把"运行时真实的调用关系与状态"叠加到依赖图上;三是可视化与告警,用仪表盘展示依赖拓扑,并识别异常(调用失败、链路延迟、依赖缺失)。真实经验是:静态依赖图会随时间漂移,需结合运行时数据或定期重建;可观测依赖图的价值在于"帮助定位故障影响面、识别依赖风险、支撑架构决策",实现上要平衡"数据准确性"与"维护成本"。

依赖图可观测实现的关键是"静态结构 + 运行时数据"结合,用追踪与监控让依赖关系可见化,从而支撑故障定位与架构决策。

#
★★

16. Backstage Software Catalog 在依赖治理的真实工程价值

Backstage Software Catalog 在依赖治理中的真实工程价值是什么?

  • Software Catalog 的价值
  • 依赖信息集中化
  • 治理与可观测

Backstage Software Catalog 在依赖治理中的真实工程价值在于:把组织内所有软件实体(服务、组件、API、资源等)及其元数据集中管理,形成"软件资产目录",从而让依赖关系可被统一查看、跟踪与治理。具体价值包括:一是集中化依赖可见性——Catalog 能展示服务间依赖、谁依赖谁、依赖了哪些外部资源,让"依赖图"从分散的代码中抽象出来;二是支撑治理与合规——通过统一元数据(owner、SLA、依赖、成熟度)识别依赖风险、查找无主服务、评估变更影响;三是自助化——让团队通过目录快速找到依赖的 owner 与信息,减少"找谁负责"的沟通成本。真实经验是:Backstage 的价值在"把依赖信息标准化、集中化、可治理",但需要团队持续维护实体元数据与实际同步,否则目录会失真。它更像"治理平台"而非"监控工具"。

Software Catalog 把依赖信息"标准化、集中化、可治理",价值在依赖可见性、owner 识别与风险治理,但依赖元数据的持续维护是前提。

#
★★

17. 关键依赖的冗余(Redundancy)设计的真实边界

关键依赖的冗余(Redundancy)设计的真实边界是什么?

  • 冗余的价值
  • 冗余的成本与边界
  • 冗余的适用场景

关键依赖的冗余(Redundancy)设计指为关键组件、数据或路径提供多副本/备选,以提升可用性与容错。真实价值在于:对"关键、故障影响大、required for availability"的依赖(如数据库、消息队列、核心服务),通过多实例、多区域、主备、备选路径等方式消除单点故障,提升 SLA。但真实边界在于:冗余是有成本的——增加资源开销、数据一致性复杂度、运维复杂度与故障切换风险;并非所有依赖都值得冗余,过度冗余会"浪费成本、增加复杂度、甚至引入新的故障模式"。因此冗余设计要"按关键度分级":对真正关键的依赖做冗余并充分演练故障切换,对非关键依赖不过度冗余。真实边界是"冗余服务于可用性目标,冗余的收益要与成本、复杂度平衡",且冗余方案本身要经过验证(如混沌/故障演练)而非"纸面冗余"。

冗余是"用成本换可用性"的取舍,边界在于按关键度分级、平衡成本与复杂度,并验证冗余真正可用(演练),避免无效冗余。

#
★★

18. 关键路径的 SLA 设定与监控

关键路径的 SLA 设定与监控如何实现?

  • 关键路径 SLA 的设定
  • 监控与告警
  • 与业务目标对齐

关键路径的 SLA 设定与监控,是把"用户可感知的关键链路"目标化为可度量的 SLA 并持续监控。设定方法包括:一是从业务目标出发,识别关键路径(如登录、下单、支付等端到端链路),把"业务可接受的时间/可用性"转化为 SLA(如 p95 延迟、可用率、错误率);二是对关键路径做链路分解,把总 SLA 分配到各环节(预算分配),明确各环节的响应时间与错误预算;三是建立监控,用链路追踪与指标采集持续度量关键路径的实际表现,并与 SLA 对比。监控与告警的真实经验是:SLA 要"可度量、够用、聚焦关键路径",避免为所有环节都设严格 SLA;监控要覆盖"用户视角"而非仅内部指标;告警要基于错误预算与趋势,避免"无意义告警"。真实经验是"从业务目标定 SLA,用链路预算分配,用监控闭环保障"。

关键路径 SLA 的核心是"从业务目标到链路预算再到监控闭环",设定聚焦关键路径、分配预算、并监控用户视角的表现。

#
★★

19. 依赖治理(Dependency Governance)的真实组织流程

依赖治理(Dependency Governance)的真实组织流程是什么?

  • 依赖治理的内容
  • 组织流程与责任
  • 工具与门禁

依赖治理(Dependency Governance)的真实组织流程,是让团队对"依赖引入、依赖升级、依赖风险"有统一管理与责任。流程包括:一是依赖引入的审查——新依赖需评估其必要性、许可证、维护活跃度、安全与质量,避免随意引入;二是依赖升级的评审——特别是安全更新与破坏性升级,有评估与回滚机制;三是依赖风险的持续监控——用工具扫描漏洞、许可证、版本陈旧度、是否无主;四是责任归属——明确依赖的 owner 与治理责任。真实组织经验是:依赖治理不能只靠"人工自觉",要建立"门禁 + 工具 + 流程":用自动化工具(SCA、依赖扫描)持续发现风险,用评审流程把关引入与升级,用定期审查清理不必要依赖。核心是"在引入、使用、升级、报废各环节都有管控",避免依赖失控。

依赖治理是"全生命周期管控"——引入审查、升级评审、风险监控、责任归属,靠工具门禁与流程结合,避免依赖无序膨胀。

#
★★

20. 适应度函数如何演进与退役,谁来定期复审以避开过时门禁对架构演进的阻碍?

适应度函数本身如何演进与退役,避免过时门禁阻碍架构演进,谁来负责定期复审?

  • 适应度函数的演进
  • 过时门禁的负面作用
  • 复审责任与机制

适应度函数本身也需要生命周期管理,否则会变成"过时门禁"阻碍架构演进。演进与退役的关键包括:一是适应度函数应随架构与业务演进而更新——当架构约束变化(如技术栈调整、新架构模式)时,对应的适应度函数要同步修改或废弃;二是识别"过时门禁"——当初建立的约束可能已不再适用(如旧的性能阈值、已废弃的技术约束),继续执行会阻碍合理演进,需要识别并退役;三是建立复审机制——由架构负责人或团队定期(如每季度/每架构评审周期)复审适应度函数清单,评估"每条约束是否仍有效、是否仍被实际执行、是否已成为负担",并据此更新或删除。真实经验是:适应度函数要"有 owner、有复审、有退役机制",避免这些自动化检查从"守护架构"变成"僵化架构"。

适应度函数生命周期的核心是"复审与退役",避免过时门禁阻碍演进,责任落在架构负责人与团队定期复审机制上。

#

21. 循环依赖(Circular Dependency)的真实识别与重构

循环依赖(Circular Dependency)的真实识别与重构方法是什么?

  • 循环依赖的危害
  • 识别方法
  • 重构策略

循环依赖(Circular Dependency)指模块/类/组件之间相互依赖形成环,会带来编译/加载问题、耦合加深、难以测试与维护、以及理解困难等危害。真实识别方法包括:用静态依赖分析工具扫描模块/包/类的依赖图,找出环;在提交/CI 中设置"依赖方向检查"防止新循环引入;观察构建时的初始化顺序问题(A 依赖 B、B 依赖 A 导致的加载失败)。真实重构策略包括:一是"抽取共享依赖"——把循环中共同依赖的部分抽成独立模块,打破环;二是"依赖反转"——通过接口/抽象层让高层不直接依赖低层实现,消除循环;三是"按方向分层"——明确依赖方向,让依赖单向流动;四是"事件/消息解耦"——用事件或回调切断强依赖。真实经验是:识别循环依赖要"工具化 + 门禁化",重构要"先抽取共性、再反转方向",并让依赖保持单向流动。

循环依赖的识别靠静态分析与门禁,重构的核心是"打破环"——抽取共享、依赖反转、分层定向,让依赖单向流动。

#

22. RFC 与 ADR 的边界与协同关系

RFC 与 ADR 的边界与协同关系是什么?

  • RFC 与 ADR 的区别
  • 各自适用场景
  • 协同关系

RFC(Request for Comments,征求意见)与 ADR(Architecture Decision Record,架构决策记录)是不同性质的文档,边界与协同关系如下:RFC 是"决策前的讨论提案",用于提出方案、征求意见、收集反馈、推进讨论,是"open-ended 的探讨过程",适合在决策尚未确定、需要集思广益时使用;ADR 是"决策后的记录",用于固化已确定的决策及其理由,是"closed 的决策真相",适合在决策已定、需要沉淀与追溯时使用。协同关系是:RFC 作为"决策前"的讨论载体,ADR 作为"决策后"的记录载体,二者衔接——一个 RFC 经过讨论定稿后,可由其结论产生一个 ADR。真实经验是:用 RFC 做"探讨与收敛",用 ADR 做"记录与追溯",形成"先讨论再记录"的完整闭环,避免把讨论过程当作决策,也避免决策无记录。

RFC 是"决策前讨论",ADR 是"决策后记录",协同是"RFC 收敛出结论、ADR 固化结论",形成完整决策闭环。