ruby-on-rails - Rails 应用程序中的数据和业务逻辑历史
问题描述
我正在开发一个现有的 Rails 应用程序,在 Postgresql 上,它为承包商计算佣金和各种数据。
员工有许多承包商。承包商和雇员都有在业务逻辑中用于计算佣金的字段。
我的客户希望获得所有数据的年度快照,以便他们可以自由更改业务逻辑、添加和删除员工等,而不会丢失他们过去(计算的)数据。
我在实现这一点的最初想法是 Postgres 模式。我每年都会有一个 cron 任务,它按原样获取数据库并将每个表和记录复制到那一年的模式中。这相当于在未来简单地拥有旧版本的数据库。但是,我担心一旦将来添加列,应用程序逻辑就会中断。
例如,一年创建了一个模式,contractors
稍后将一列添加到用于佣金计算的表中。我如何保存不依赖于新列的旧版本的佣金公式?
我能想到的唯一解决方案是简单地保留旧公式并根据模式有条件地使用它们。我觉得这很脏,随着业务逻辑的变化会导致很多垃圾。
你建议我如何解决这个问题?在此先感谢您的帮助!
解决方案
我认为您应该将计算出的佣金存储在您的数据库中以防止重新计算。接受的计算值是事实,只需保持该值即可。
如果您以后需要审核计算字段,我不确定旧的计算逻辑是否应该非常方便地在应用层检索。您可能需要为此追溯您的代码 svn。或者数据仓库应该有计算逻辑。应用程序只能提供所需的计算参数并让审核员处理。
如果用例是为了轻松回滚到特定的历史业务规则,那么我不建议满足这种要求。
推荐阅读
- pointers - 如何在golang中干净地初始化两个相互依赖的结构?
- java - 如何从 Java 类调用 Scala 隐式类方法
- java - 带有 Gradle 的 Liquibase - changeLogFile 路径的愚蠢问题
- android - 如何在 google play store 的单个曲目中提供 2 个版本?
- gridview - Yii2:加载 index.php 时如何不填充 GridView
- angular - 存储更改时 NgRx 选择器不更新
- java - Spring Boot多模块属性不起作用
- r - 在数据框中将 ENSEMBL ID 转换为基因 ID
- python - 如何因为按键被按下而退出功能?
- angular - 值更改后未定义的角度可观察值