architecture-decision-record 项目解析:适应度函数(Fitness Function)如何把架构决策变成可自动验证的代码
【免费下载链接】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 RecordADR解决了把决策写下来的问题但写下来的决策如何确保团队真的在遵守本篇文章以 architecture-decision-record 仓库中的《Fitnessfunktioner for beslutninger som kode》决策即代码的适应度函数文档为核心讲解 fitness function 的核心概念、与 ADR 的分工、四大实战价值、基于 AI 大语言模型的检查提示词以及 ArchUnit / ArchUnitTS 等架构单元测试工具。读完你就能在自己的项目中把每一条架构决策固化成随每次提交与构建自动运行的客观检查。什么是决策即代码的适应度函数原文档给出一个精炼的定义适应度函数fitness function是用编程代码编写的一种客观、自动化的检查用于验证一项决策是否仍然被遵守。这个定义有三个关键限定词客观objektiv检查结果只有通过 / 失败两种状态不依赖评审者的主观印象自动化automatiseret检查以代码形式存在可以挂接到持续集成CI流水线中无需人工触发针对决策for beslutninger它验证的不是代码风格或单元行为而是我们当初做出的架构决策是否仍然成立。原文档同时指出两条直接收益适应度函数让决策变得可测试、可保证testbare og kontrollerbare并且对**质量保证kvalitetssikring、合规流程regulatoriske processer和治理目标governance-mål**有显著帮助。在 architecture-decision-record 仓库中这篇文章是英文源文档 fitness-functions-for-decisions-as-code 的丹麦语翻译丹麦语版本同时被收录进仓库根 README.md 的 Fitness functions for decisions as code 章节见 README.md并作为 12 篇核心文档之一在 spec/content.md 中被明文列出。如果你想阅读同主题的中文版本仓库还提供了 《将决策作为代码的适应度函数》 等 30 种语言的译文方便对照学习。适应度函数与 ADR 的分工文档记录决策代码执行决策原文档用一个非常简洁的公式定义了二者关系决策记录ADR负责记录决策适应度函数负责**执行håndhæver**决策。文档中的成对示例如下决策示例为满足审计要求我们采用事件溯源event sourcing适应度函数示例我们使用持续集成服务器来测试所有状态变更都必须产生事件。也就是说ADR 回答我们决定怎么做、为什么这么做而 fitness function 回答系统是否仍然按这个决定在运行。二者的角色差异可以归纳为下表维度决策记录ADR适应度函数Fitness Function形态人读的 Markdown 文档机器执行的程序代码作用记录决策及其背景、后果验证决策是否仍被遵守时效决策时刻的一次性产物可追加修订随每次 commit / build 持续运行的活规则判定靠人工评审与理解通过 / 失败的客观结果典型落点adr/或decisions/目录单元测试、CI 脚本、架构测试仓库中为记录决策这一半提供了大量模板例如 Michael Nygard 模板Title / Status / Context / Decision / Consequences 五段式以及 MADR 项目模板强调备选方案及利弊而执行决策这一半正是本篇文档的主题。仓库的 writing-guide.md 也把Fitness functions — making a decision testable, not just documented让决策可测试而不只是被记录单列为一节与本文档内容相互印证。为什么适应度函数有助于决策落地原文档给出四个核心理由逐一展开如下1. 客观度量工作结果清晰可见适应度函数要么通过、要么失败不存在模糊地带。相比代码评审时口头提醒大家遵守某某约定一条自动化检查给出的是确定的布尔结果任何人都能一眼看到当前系统是否满足决策要求团队工作状态变得透明。2. 持续使用随每次提交与构建运行的活规则适应度函数不是一次性审计而是常驻的规则——每次 commit、每次 build 都会执行。这意味着决策的遵守不是靠记忆或自觉而是靠流水线强制。这与本仓库自身的工程实践是同一思路仓库通过 scripts/audit-locales.py 把每个语言目录必须与英文源 en-001 完全对齐205 个文件、README.md 必须是 index.md 的软链接、所有相对链接与锚点必须可解析这一内容治理规则写成了可自动执行的检查并在 .github/workflows/ci.yml 中配置为每次 push 和 pull request 都运行。从源码结构看这正是一个针对内容同步决策的 fitness function 实例。3. 重构的信心自动捕获违反决策规则的错误重构时最怕结构变了但没人意识到某条决策被悄悄破坏。适应度函数会在重构代码的构建阶段自动发现此类偏差并让流水线失败把事后发现变成提交时发现为持续演进提供安全网。4. 可扩展的治理不制造瓶颈地保证标准人工审批会随着规则数量增长而成为瓶颈自动化检查则可以无限扩展——每条决策对应一条检查规则越多流水线越严格却不需要增加任何人力评审环节。这让治理从人的流程转变为代码的流程。用 AI 大语言模型充当适应度函数完整提示词原文档明确回答了适应度函数可以使用 AI 吗——可以。思路是让 AI 大语言模型针对我们的工作成果计划、代码、模式、API 等提出检查性问题从而充当一条广义的适应度函数。文档给出了可直接复用的完整提示词模板IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning. IMPORTANT: Turn on extended thinking. Turn on expert advice. Turn on search. This is a fitness function to evaluate if our work is using all our decisions, and is correct and accurate. - Our decisions are here: {url} - Our work to evaluate is here: {url} Explain any errors, problems, gaps, weaknesses. Be direct. Be decisive.这份提示词可以从四个层面理解方便你按需调整推理模式指令前两行要求模型优先基于检索的推理而非基于预训练记忆的推理并开启扩展思考extended thinking、专家建议expert advice和搜索search能力——本质上是要求模型把决策文档和工作产物当作证据来源而不是凭训练语料里的泛化知识作答角色声明第三至五行明确这是一条评估我们工作是否使用了全部决策、是否正确且准确的 fitness function输入占位{url}需要替换为两处真实地址——决策存放处如 ADR 目录或文档链接与被评估的工作产物如 PR 变更、设计文档、API 契约输出要求最后一行要求模型直接、果断地指出错误、问题、缺口与弱点避免含糊其辞。同一份提示词也原样收录在 writing-guide.md 中说明它是仓库推荐的、经过项目团队验证的通用形态可以直接粘贴使用或在此基础上扩展。架构单元测试ArchUnit 与 ArchUnitTS当决策本身是代码的架构形态时例如分层依赖、包边界、禁止某类循环引用最自然的实现方式是把 fitness function 写成架构单元测试。原文档推荐了两个工具ArchUnitJava使用任何普通的 Java 单元测试框架如 JUnit来检查 Java 代码的架构规则。它把分层不得反向依赖领域层不得引用基础设施层这类规则写成可断言的测试随测试套件一起在 CI 中执行。下面是一段通用示意非本仓库代码具体 API 以工具当前版本为准// 示意用 ArchUnit 在 JUnit 中声明一条架构规则 AnalyzeClasses(packages com.example.app) public class ArchitectureRulesTest { Test void domain_should_not_depend_on_infrastructure() { noClasses().that().resideInAPackage(..domain..) .should().dependOnClassesThat().resideInAPackage(..infrastructure..) .check(new ClassFileImporter().importPackages(com.example.app)); } }ArchUnitTSTypeScript / JavaScript使用 Jest、Vitest、Jasmine 等测试框架检查 TypeScript 与 JavaScript 代码的架构规则为前端与 Node.js 项目提供同样的能力。它同样把架构约束表达为测试用例例如某个目录下的模块不得 import 另一个目录的模块失败即让测试套件报错。把这两类工具与前述 AI 提示词放在一起看可以梳理出一条完整的决策即代码落地路径能用确定性代码表达的架构决策 → 写成 ArchUnit / ArchUnitTS 之类的架构单元测试难以用代码表达的开放性决策如计划、文档、API 设计是否与全部决策一致→ 用 AI 提示词充当柔性检查。两者都挂进 CI就构成了既有硬约束又有软校验的双层保证。在本仓库中的落地路径与相关资源如果你希望基于本仓库进一步实践决策即代码可以从这几处切入阅读原文英文源文档 fitness-functions-for-decisions-as-code 与中文译本 《将决策作为代码的适应度函数》 内容完全对应适合对照研读查看集成位置根 README.md 的 Fitness functions for decisions as code 章节README.md把该主题与决策记录模板决策生命周期架构图与视图等内容并列帮助你理解它在整套 ADR 方法论中的位置结合相邻机制紧跟在 fitness functions 章节之后README 还介绍了Decision guardrails for pull requests见 README.md即 ADR Guard 之类的工具在 pull request 阶段自动拦截改动了受保护代码却未新增或更新 ADR的情况并支持显式的ADR-Exempt:豁免行——这是决策执行在代码评审环节的另一种自动化形态与本文主题形成互补复用 AI 检查提示词skills 目录下的 writing-guide.md 收录了同样的 fitness function 提示词说明该项目已把这一实践固化到面向 AI 编码代理的写作指南中可作为团队内部约定直接采用参考示例与模板仓库 示例目录 中有 40 个 ADR 实例如 环境变量配置、事件溯源相关的时间戳格式 等模板目录 提供 11 种决策记录模板可用来补齐记录决策这一半。需要提醒的是本文所述 fitness function 属于通用软件工程实践不同工具ArchUnit、ArchUnitTS的 API 与版本差异较大在关键系统中使用前请自行核验工具文档与项目实际情况这也是仓库 README 中明确给出的注意事项。总结一句话概括本文档的核心主张ADR 负责把决策写下来fitness function 负责让决策被执行。通过客观度量、随构建持续运行、为重构提供信心、以代码实现可扩展治理这四个价值点适应度函数把架构决策从纸面文档变成了可测试、可保证的工程资产。对于无法用确定性代码表达的开放性决策还可以借助 AI 大语言模型提示词充当柔性检查——原文档提供的完整提示词模板可以直接投入实战。结合 ArchUnit / ArchUnitTS 等架构单元测试工具你就能在 CI 中建立硬规则 软校验的双层决策保障体系。赞分享【免费下载链接】architecture-decision-recordArchitecture decision record (ADR) examples for software planning, IT leadership, and template documentation项目地址https://gitcode.com/gh_mirrors/ar/architecture-decision-record点击查看免费下载相关推荐HCCL 集合通信算法全解Server 内 / Server 间 / 超节点间算法选型、HCCL_ALGO 配置与分级通信原理HCCL 集合通信算法全解Server 内 / Server 间 / 超节点间算法选型、HCCL_ALGO 配置与分级通信原理 集合通信算法是决定集群通信性能电视盒子变 Linux 服务器Armbian 移植实操指南电视盒子变 Linux 服务器Armbian 移植实操指南 amlogic s9xxx armbian 是一个开源项目可以把 Armbian基于 Debi从架构决策到代码实现architecture-decision-record的完整落地流程从架构决策到代码实现architecture decision record的完整落地流程 架构决策记录Architecture Decision Reco上一篇【亲测免费】 rCore-Tutorial-v3 开源项目指南下一篇MoA项目快速入门指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

JAVA编程基础---面向对象(上)

JAVA编程基础---面向对象(上)

一、面向对象的思想(1)面向对象则把构成问题的事物按照一定的规则划分为多个单独的对象,然后通过调用对象的方法来解决问题。 (2)面向对象的特性主要可以概括为封装性、继承性和多态性封装性:封装是面向对象…

2026/10/12 3:00:43 阅读更多 →
【精华】ROS学习(二):Realsense ROS驱动安装

【精华】ROS学习(二):Realsense ROS驱动安装

文章目录Realsense ROS驱动安装1 系统环境及安装准备2 安装Realsense SDK3 安装Realsense ROS4 异常问题(1) 异常问题1(2) 异常问题2Realsense ROS驱动安装 1 系统环境及安装准备 系统:Ubuntu18.04ROS:Melodic视觉传感器:Intel RealSense D…

2026/10/12 3:00:43 阅读更多 →
基于JAVA语言的泛型应用

基于JAVA语言的泛型应用

一、实验目的 熟悉并掌握泛型方法的定义与使用。二、预习内容I/O的属性及应用;三、实验设备与环境1.Java开发包(JDK);2.开发软件 (IDEA);四、实验内容 1.定义一个泛型方法addOp(),形参接收的类型为泛型数组…

2026/10/12 3:00:43 阅读更多 →

最新新闻

(161页PPT)制造业变革转型八大领域营销服务研发供应链制造质量财务及人力资源的痛点与改进策略(附下载方式)

(161页PPT)制造业变革转型八大领域营销服务研发供应链制造质量财务及人力资源的痛点与改进策略(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/88338620 资料解读:制造业变革转型八大领域营销服务研发供应链制造质量财务及人力资源的痛点与改进策略 详细资料请看本解读文章…

2026/10/12 3:52:20 阅读更多 →
Chrome 自动化「点了没反应」:5 个真实坑与一套排查法

Chrome 自动化「点了没反应」:5 个真实坑与一套排查法

Chrome 自动化「点了没反应」:5 个真实坑与一套排查法脚本跑完了,控制台没有报错,页面也没有任何反应。做浏览器自动化,最耗时的从来不是崩溃,而是静默失败。本文用 CDP(Chrome DevTools Protocol&#xff…

2026/10/12 3:52:20 阅读更多 →
【C++】从基类到派生类:关于C++继承的务实梳理

【C++】从基类到派生类:关于C++继承的务实梳理

🏆浮世尘弦:个人主页 ⭐个人专栏:《C语言》、《数据结构与算法》、《C》 💎:非淡薄无以明志,非宁静无以致远 前言 在 C 中,继承是面向对象编程的重要机制之一。它允许我们基于已有的类定义新的类…

2026/10/12 3:52:20 阅读更多 →
短视频配音工具哪个好用

短视频配音工具哪个好用

说明本文基于公开产品体验与多方使用反馈整理,不含任何商业合作,仅作为选型参考。文中产品均按公开信息描述,具体功能以各平台官方页面为准。结论先看短视频配音工具没有哪个绝对最好,选型的核心就是场景匹配。已经在用剪映做视频…

2026/10/12 3:52:20 阅读更多 →
微信自动回复突然全停了?五个检查点从外到内

微信自动回复突然全停了?五个检查点从外到内

早上打开后台的那一刻就知道不对劲:一整夜的咨询,一条自动回复都没有,买家的消息静静躺在列表里。自动回复「全停」和「偶发漏答」是两种问题——偶发漏答多半是词表的事,全停基本是链路断了。排查顺序很重要:从外到内…

2026/10/12 3:52:20 阅读更多 →
Python aifactory-alpha 包详解与实战案例

Python aifactory-alpha 包详解与实战案例

1. 引言aifactory-alpha 是一个面向 Python 开发者的 AI 工具包,旨在简化人工智能相关功能的集成与调用。它封装了常见的 AI 能力,如文本生成、图像处理、模型调用等,帮助开发者以更少的代码完成更多任务。本文将从功能、安装、语法、参数、实…

2026/10/12 3:51:19 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →