决策即代码:用适应度函数(Fitness Functions)自动化校验架构决策的实践指南
【免费下载链接】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解决了决策如何被记住的问题而适应度函数fitness function解决的是决策如何被执行的问题——用编程代码写出客观、自动化的检查在每次提交与构建时验证团队是否仍在遵守既定决策。本文以 architecture-decision-record 仓库中的 《Fitness functions for decisions as code》 文档为主体结合仓库内的 ADR 概念定义、模板与示例完整讲解决策即代码的落地方法从理解适应度函数与决策记录的关系到用 CI 与单元测试实现自动校验再到借助 LLM 将适应度函数升级为智能评审助手。读完本文你将掌握一套可复制、可运行的架构决策自动校验方案。什么是适应度函数决策即代码适应度函数fitness function是一类用编程代码编写、自动运行的客观检查用于验证既定决策正在被持续遵守。它的本质是把一份决策从写在文档里的愿望变成跑在流水线里的断言。在 英文原版文档 中这一概念被归纳为两条核心价值让决策可测试、可确认testable and assurable决策不再停留在口头或文档层面而是可以像功能需求一样被自动化地验证强力支撑质量保证、监管流程与治理目标quality assurance, regulatory processes, and governance goals合规类、审计类、治理类要求往往需要可证明的执行适应度函数正是把证明机器化的手段。该文档属于仓库 12 份核心文档 之一源语言为英文在 阿拉伯语翻译 等 30 个语言目录中均有对应版本说明这套方法是作为 ADR 生态的基础方法论被收录的。与决策记录的分工文档负责记录函数负责确认仓库中定义了 ADR 生态的一整套术语详见 《What is an architecture decision record?》ADRArchitecture Decision Record记录一个重要架构决策及其背景context与后果consequences的文档ADArchitecture Decision针对显著需求的软件设计选择ASRArchitecturally-Significant Requirement对系统架构有可度量影响的需求。适应度函数与决策记录的关系可以用一句话概括决策记录ADR负责记录决策适应度函数负责确认决策。前者是静态的、面向人的知识沉淀后者是动态的、面向机器的持续验证。从决策到函数一个 event sourcing 实例文档给出了一个非常典型的配对示例恰好与仓库中的数据库选型示例相互印证决策Decision我们采用事件溯源event sourcing来满足审计需求。适应度函数Fitness Function我们使用持续集成CI服务器来测试所有状态变更都必须产生事件。这两个条目在 README.md 的对应章节 与各语言翻译中保持一致。仓库中的 《Choosing a database technology》示例 也把事件数据库event databases描述为以事件序列存储数据、记录每次数据变更适合审计、事件溯源与复杂数据处理的场景——这为上述决策提供了上下文佐证当团队决定用事件溯源满足审计要求时每次状态变更都产生事件就是一条不可违背的架构规则必须被机器持续校验。把这条规则写成适应度函数本质上就是回答一个问题如果我的代码违反了这条决策我的构建会变红吗如果不会这条决策就还只是文档没有成为代码。为什么适应度函数能帮助决策落地原文档从四个维度阐述了适应度函数的价值这四条也是说服团队投入的必要论证客观测量Objective measurements适应度函数只有两种结果通过或失败。工作进度、合规状态因此变得可见且清晰——不需要人工评审去感觉是否遵守了决策构建状态就是事实。这天然契合质量保证与审计场景对可证明性的诉求。持续使用Continuous use适应度函数是团队的活规则living rules在每一次提交commit和每一次构建build中自动运行。与一次性的人工检查不同它嵌入开发循环本身任何违反决策的改动都会在最早期被拦截而不是等到上线后追责。重构信心Confidence to refactor当系统演进、代码重构时适应度函数能够自动捕获决策规则错误。它相当于给架构决策装上了回归测试重构不会悄悄破坏既定架构约束因为函数会在破坏发生的瞬间报错。可扩展治理Scalable governance适应度函数把标准断言化之后治理能力可以随代码库规模线性扩展不会因为人工评审而产生瓶颈。规范由机器强制执行审查者的精力可以释放到真正需要人类判断的地方。落地路径把决策写进 CI 与测试要让适应度函数真正生效需要把它挂接到团队的自动化执行链路上。仓库中的 《Continuous integration》示例 展示了 CI 的决策记录写法Context / Decision / Rationale / Consequences / Conclusion 结构其中明确写道持续集成会自动构建、测试并部署代码变更。适应度函数正是运行在这条自动化链路上的断言集合。一个典型的实施步骤选定要校验的决策从 ADR 日志中挑选可机械判定的规则。例如 Nygard 模板Decision record template by Michael Nygard含 Status / Context / Decision / Consequences 四段结构中记录的我们使用事件溯源满足审计这类决策把规则翻译成断言将决策中的约束转为单元测试、静态检查或集成测试中的代码断言接入 CI让断言随每次提交与构建自动运行。文档给出的示例即用 CI 服务器测试所有状态变更必须产生事件失败即反馈断言失败意味着决策被违反构建变红团队立即收到可定位的错误信息。仓库自带的 architecture-decision-record-skill 还提供了配套的工程习惯ADR 文件采用现在时祈使短语 小写连字符 .md 扩展名命名如choose-database.md便于与提交信息对齐同时建议按决策形态选择模板默认 Nygard、轻量选项对比用 MADR、需要正式可测试的非功能需求语言用 Planguage 等。这些习惯让记录决策 → 生成断言的链路更顺畅。让 LLM 担任适应度函数AI 辅助决策评审原文档专门回答了适应度函数能否使用 AI这一前沿问题可以。适应度函数可以借助大语言模型LLM向 AI 提出关于工作计划、代码、数据模型schemas、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.这份提示词的设计要点值得拆解前置指令IMPORTANT 行要求模型优先基于检索retrieval-led reasoning而非训练记忆推理并开启深度思考、专家建议与搜索能力——这是为了让评审结果锚定在真实仓库与决策文档上而非模型的先验知识角色声明明确告诉模型你是一个适应度函数任务是评估工作是否使用了全部决策、内容是否正确准确输入占位符{url}分别指向决策所在位置与待评估的工作所在位置使函数可以泛化到任意仓库输出要求要求模型直接指出错误、问题、缺口与弱点并保持直接、果断的语气避免含糊其辞。将这份提示词接入 CI例如在流水线中调用 LLM API 并解析其结论就得到了一种可读代码、可对决策文档的智能适应度函数——它不再只校验机械规则还能发现决策没有被使用这类语义层面的偏离。这与仓库中 spec/content.md 的写作约束代码块、URL 与文件名不得翻译产品与公司名保持拉丁字母相互配合保证给模型看的输入始终是稳定的原文。架构单元测试现成的适应度函数工具原文档最后介绍了两类开箱即用的架构规则检查器它们本质上是把架构决策转成单元测试的成熟实现ArchUnit面向 Java 代码的架构规则检查库可以用 Java 中任意普通单元测试框架如 JUnit运行。它把分层依赖、包结构、命名约定等架构规则写成可断言的测试是 Java 项目落地决策即代码最常用的起点ArchUnitTS面向 TypeScript 与 JavaScript 代码的同类工具支持 Jest、Vitest、Jasmine 等测试框架适合前端与 Node.js 项目。这类工具与适应度函数理念完全同构架构规则即断言断言即测试测试随 CI 运行。选用哪一个取决于技术栈Java 生态选 ArchUnitTS/JS 生态选 ArchUnitTS而校验哪些规则应直接来源于团队已接受的 ADR 文档形成决策 → 规则 → 测试的闭环。本文对应的仓库资源一览以下路径可在本仓库中继续深入阅读资源路径用途英文源文档locales/en-001/documents/fitness-functions-for-decisions-as-code/index.md本文主题的权威来源阿拉伯语译文locales/ar-001/وثائق/دوال-الملاءمة-للقرارات-بوصفها-شيفرة/index.md多语言翻译示例ADR 基础概念locales/en-001/documents/what-is-an-architecture-decision-record/index.mdAD/ADL/ADR/ASR 术语Nygard 模板locales/en-001/templates/decision-record-template-by-michael-nygard/index.md最常用的四段式 ADR 结构CI 示例locales/en-001/examples/continuous-integration/index.md决策记录完整范本数据库选型示例locales/en-001/examples/choosing-a-database-technology/index.mdevent sourcing 相关决策上下文ADR 编写技能skills/architecture-decision-record-skill/SKILL.md命名、模板选择等工程规范结语适应度函数把架构决策从不可验证的文档声明转化为可验证的自动化断言是 ADR 方法论的天然延伸记录决策ADR回答我们为什么这样做适应度函数回答我们是否还在这样做。无论是通过 CI 中的代码测试、ArchUnit 类的架构单元测试还是借助 LLM 的语义评审核心思路始终一致——让机器在每次提交时替你检查团队是否遵守了约定。当一条决策有了对应的红色构建它才真正成为了代码的一部分。赞分享【免费下载链接】architecture-decision-recordArchitecture decision record (ADR) examples for software planning, IT leadership, and template documentation项目地址https://gitcode.com/gh_mirrors/ar/architecture-decision-record点击查看免费下载相关推荐LeetCode 1658 题解Minimum Operations to Reduce X to Zero 的四种解法暴力枚举 / 前缀和 二分 / 前缀和 哈希表 / 滑动窗口LeetCode 1658 题解Minimum Operations to Reduce X to Zero 的四种解法暴力枚举 / 前缀和 二分 /使用 ADR 模板记录架构决策Atlantis 项目的架构决策记录实践指南使用 ADR 模板记录架构决策Atlantis 项目的架构决策记录实践指南 导读 本文围绕 Atlantis 仓库中的 docs/adr/template.mDevOpsCI/CD基础设施Repowise 架构决策引擎实战用 get_why 挖掘代码背后的 Why、对齐度与决策健康度Repowise 架构决策引擎实战用 get_why 挖掘代码背后的 Why、对齐度与决策健康度 本文以 Repowise 的 architectural d创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

C Cleaner Plus 界面个性化指南:深色/浅色主题与侧边栏切换,打造专属清理工作台

C Cleaner Plus 界面个性化指南:深色/浅色主题与侧边栏切换,打造专属清理工作台

【免费下载链接】c_cleaner_plus Windows的开源强力清理工具,可扫描并清理全盘中的垃圾文件、大文件、重复文件及系统残留等 项目地址: https://gitcode.com/gh_mirrors/cc/c_cleaner_plus 点击查看 免费下载 C Cleaner Plus 是一款面向 Windows 的开源…

2026/10/11 22:34:24 阅读更多 →
Python实现人脸情感特征提取:从对齐到深度嵌入的工程实践

Python实现人脸情感特征提取:从对齐到深度嵌入的工程实践

简介:本资源面向计算机视觉与情感计算方向的初学者及研究者,提供一套基于几何法的人脸情感特征提取Python实现。人脸特征提取通常分为静态图像与动态图像两类方法,而表情的产生与表达主要依赖面部器官及褶皱区域的变化,因此该资源…

2026/10/11 22:34:24 阅读更多 →
Java 接 YOLO ONNX:跨语言视频目标检测落地实践

Java 接 YOLO ONNX:跨语言视频目标检测落地实践

简介:本资源面向需要在 Java 项目中落地视频目标检测的开发者,提供一套 Java 调用 Python YOLO ONNX 模型的完整方案,支持 YOLOv5、YOLOv7、YOLOv8 等主流模型,并覆盖 RTSP/RTMP 视频流处理场景。整体架构由 Java 端负责视频流获取…

2026/10/11 22:34:24 阅读更多 →

最新新闻

Vue打包工具与脚手架实战:从Webpack配置到TaoToken统一Key接入

Vue打包工具与脚手架实战:从Webpack配置到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/12 0:08:03 阅读更多 →
具身智能模型加速实战:感知、决策与控制端算法拆解

具身智能模型加速实战:感知、决策与控制端算法拆解

简介:本资源面向具身智能方向的算法工程师与研究者,聚焦典型模型与加速算法的落地实践,帮助读者理解如何在硬件平台上高效部署感知、决策与行动模型。包内共187个文件,以90个Python脚本、25个Shell脚本、24个Markdown文档为主&…

2026/10/12 0:08:03 阅读更多 →
Spring AOP切点表达式提取与复用:从@Pointcut到参数绑定最佳实践

Spring AOP切点表达式提取与复用:从@Pointcut到参数绑定最佳实践

1. 重复的表达式迟早出事:提取切点前先看清痛点我见过太多项目里的切面代码是这么写的:每个切面里都压着一行长长的execution(public * com.example.order.service..*.*(..)),LogAspect里拷一份,MetricsAspect里再拷一份&#xff…

2026/10/12 0:07:03 阅读更多 →
基于SSM的二手家电回收系统:数据库建模与订单状态机实践

基于SSM的二手家电回收系统:数据库建模与订单状态机实践

从“JavaSSM二手家电回收”这几个关键词落地,这个选题在课程设计、毕业设计和中小型商用场景里其实相当典型。它既不像纯商城系统那样卷入复杂的支付和库存逻辑,也比简单的CRUD多了订单流转、估价计算、状态管理等业务深度,正好卡在“能讲清楚…

2026/10/12 0:07:02 阅读更多 →
盲道与障碍物图像分割数据集:3500张真实街景开箱即用

盲道与障碍物图像分割数据集:3500张真实街景开箱即用

简介:本资源是面向计算机视觉初学者与图像分割实践者的盲道及障碍物识别专用数据集,适用于无障碍环境感知、智能导盲辅助系统等实际场景的模型训练与算法验证。数据集共3500张标注图像,已按标准分割任务划分训练集(230张&#xff…

2026/10/12 0:07:02 阅读更多 →
SolidWorks Routing英文界面修复指南:修改文件位置和语言包

SolidWorks Routing英文界面修复指南:修改文件位置和语言包

简介:Solidworks Routing模块默认英文界面的问题常困扰管路设计用户,这份docx文档面向需要将Routing切换为中文的操作者,整理了一套从语言包检查到界面切换的完整处理方案。资源共1个docx文件,压缩包仅103KB,内容紧凑&…

2026/10/12 0:07:02 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器: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/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →