不变性是否主张制造数据而不是存储数据



我最近看到了一个Account域模型的例子,其中余额每次都是从事务日志左折叠开始计算的,而不是将其作为对象的状态。这很好。但它是不变性的核心吗。(无法在此处标记提出设计的so答案)

您所描述的是一种强大的系统编写技术;它在很大程度上保证了系统永远不会丢失数据,这意味着编程错误永远不会"破坏"你的数据——一旦修复了错误,系统就会返回正确的结果,即使是在错误存在时添加的记录。一种有用的技术(与有时被称为"lambda架构"的技术密切相关)是将这种计算视为给定信息的"规范"形式,但也要在其上提供一个缓存以提高效率——比较数据库设计,其中数据库被非规范化以提高特定查询的性能。

但这并不是编写具有不可变数据的系统的唯一方法;例如,您可以在收到更新时应用更新,存储完整帐户的不可变实例,历史记录指向以前的版本(注意,如果两个人同时进行更改,这可能需要用户协调不同的"分支",与使用类似git的VCS相比)。这可能更适用于这样一个系统,即保留账户在特定时间点的确切外观非常重要,而保留从一个版本到另一个版本的变化则不那么重要(例如,我曾在一个处理保险合同的系统中工作)。

"它是不变性的核心吗?"这是一个毫无意义的问题。与其搜索"核心",我建议寻找实用的技术,使代码更清晰、更易于维护。

最新更新