当代码中的常量来自外部法律时,该如何应对

📌 One-Sentence Summary
本文概述了三种实用的软件设计习惯,以防止在将外部法规和法律规则编码时出现隐蔽且灾难性的错误。
📝 Summary
当软件实现外部法规(如税务、薪资或借贷)时,常量代表的是第三方做出的法律决策,可能会在不可预知的情况下发生变化。这类系统面临一种独特的失败特征:它们不会抛出异常,而是会产生看似合理但却错得极其离谱的数据。作者基于构建印度财务计算器的实践经验,指出了三个常见陷阱:模糊的参数定义(例如按总负债而非实付现金计算利息)、未随法规更新而保持同步的硬编码法定限额,以及在将逻辑提取为库时被遗漏在前端表单中的隐式验证。为了解决这些问题,作者提出了三个具体的开发习惯:在定义处记录法律依据并使用含义明确的参数名、将法定数值设计为具有合理默认值的可配置选项而非不可变常量,以及在核心库函数内部直接嵌入显式的防御性边界守卫。
💡 Main Points
合规软件往往以看似合理的数据静默失败
不同于产生堆栈跟踪或明显垃圾数据的普通软件 Bug,合规计算错误往往会产生数量级正确的值,这意味着带着相同错误认知编写的自动化单元测试也能顺利通过。
参数名称和文档注释必须引用法规来源并消除歧义
像「amount」这样宽泛的参数名极易导致总负债与实付税款之间的概念混淆。明确命名参数(例如「cashTaxPaid」)并引用法规条款,可以让调用方和代码审查者对照法律源规则验证合规性。
法定数值应为带有默认值的可配置选项,而非不可变常量
法定上限和费率的变更独立于软件部署计划,且往往针对特定用户群体设有法定例外。提供带有文档记录默认值的选项,允许调用方自行覆盖数值,而无需等待上游软件包的发布。
验证防线必须内置于库函数中,而非停留在前端 UI 表单
将应用逻辑提取为可复用的库会脱离 UI 层面的表单限制;如果领域函数内部缺乏防御性边界检查,极端输入可能会导致下游调用方环境中出现资源耗尽和崩溃。
💬 Key Quotes
在大多数软件中,常量是你自己做出的决定。而在实现法规的软件中,常量是其他人做出的决定,他们可以随时更改且无需告知你,而且它具备一个合法的正确值,而你最初可能就理解错了。
这就是合规代码与众不同的失败模式。普通的 Bug 会产生堆栈跟踪,或者产生一个极其离谱以至于有人会注意到的数字。而这类 Bug 产生的数字结构正确、数量级正确,但错得十分自信。
当你的代码实现了一条你无法控制的规则时,你的用户就需要一个不依赖你发布节奏的覆盖机制。
当你从应用程序中提取出一个库时,你就继承了 UI 悄悄为你完成的每一项输入验证,而且你继承它的方式,就是变成别人系统里的崩溃。
📊 Article Meta
AI Screening: 90
Featured: Yes
Source: freeCodeCamp
Author: Javeed Shaik
Category: 软件编程
Language: 英文
Read Time: 8 min
Word Count: 1754
Tags:
编程与工程 , 代码质量 , 后端开发 , 系统设计 , 法律与司法
暂无评论,快来抢沙发~