我们正在开发一个与业务相关的大型应用程序。您可以找到类似于某些 ERP、CRM 等的这些应用程序。
现在我们有一个要求,我们需要对用户输入的所有数据进行版本控制。
例如:在某个时间点,用户需要查看特定采购订单的更改历史记录是什么?
我正在寻找一个非常通用的版本控制处理程序(不严格),它甚至可以处理某些业务数据属性发生更改的情况。这个单一的版本控制处理程序应该能够处理几乎任何类型的业务对象/数据。
处理这些问题的最佳编程/数据库设计是什么。
有什么想法或意见吗?
PS:我添加了一些编程标签,因为我希望程序员能够接受这个话题并提出他们的想法。
编辑: 我正在寻找一种非常优化的方式,有点类似于存储差异而不是以序列化/转储方式存储对象。
最佳答案
采用purely functional可能正是时候惰性数据结构。
简而言之,这需要禁止对您的对象进行任何变异操作,即使所有对象实例成为 immutable .然后重新设计所有更改现有对象的操作,以基于旧对象创建新对象实例。
例如,假设您有一个包含 OrderItem
列表的 Order
实例,您需要向其中添加一个特定的 OrderItem
列表。在这种情况下,您要做的是创建 Order
的新实例,方法是用新列表替换它的项目列表,而新列表又由 cons 创建。 将新的 OrderItem
添加到旧列表。
让我用图片进一步说明这个例子。想象一下对象的存储(可以是 RAM 或关系数据库,任何东西):
Address | Object | Created by --------+--------------------+------------------------------------------ 1000 | list of OrderItems | empty list constructor 1001 | Order | Order constructor, uses address 1000 ... 1300 | OrderItem | ... 1501 | list of OrderItems | cons of addr 1300 to addr 1000 1502 | Order | replace order_items in addr 1001 by addr 1501
以这种方式存储数据的结构是持久的(例如,Chris Okasaki 在 his thesis 中对此进行了详细说明)。您可以通过跟踪其创建历史来恢复对象的任何版本;版本控制变得微不足道。请记住要点:不要改变数据,而是创建新实例。
关于php - 如何对动态业务对象/数据进行版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7794590/