具有多级嵌套关系版本控制的对象

本文关键字:版本控制 对象 关系 嵌套 多级 | 更新日期: 2023-09-27 18:00:11

我有一个复杂的对象结构,它具有描述产品配置的多层嵌套关系。配置会随着时间的推移而变化,我需要能够在未来的任何时候引用不同的配置。在任何时候,整个系统都链接到产品的特定版本,并以某种方式抽象到产品版本的整个概念。

实现这一点最直接的方法是,每次请求新版本时,克隆产品的整个结构,并将不同的版本链接在一起。然而,就数据库负载而言,这是不是有些过头了。有更好的方法吗?

我还想过单独跟踪更改,并在请求版本时重建产品,但实现和正确处理多级嵌套关系似乎相当复杂。

在数据库中保存最少的元数据来跟踪版本,并使用GIT等工具序列化整个产品结构。

具有多级嵌套关系版本控制的对象

VCS工具不是为此目的而设计的。这是一个应用程序功能(版本历史记录),应该按此处理。实现这一点的正确方法是为每个版本化的项目类型创建一个"归档"表,并通过ID将它们与当前的"实际"项目关联起来。

然后,每当项目发生更改时,在将对该项目的更改提交到主项目表之前,采用其当前状态并更新存档。

要做的重要区别是,这不是为C#对象存储版本历史记录的情况,而是用于在应用程序中存储概念性最终用户"项目"的版本历史的应用程序功能。"产品历史"answers"产品对象历史"不是一回事;你想要实现前者。你的对象状态和它们实际代表的项目是两个截然不同的东西。

Git等版本控制工具用于存储应用程序本身的修订,而不是为应用程序正在使用的数据提供存档功能。属于数据库的。

或者,如果问题是能够将数据回滚到特定的时间点,那么这应该通过对数据库进行带有日期戳的快照来实现,这些快照可以根据需要进行交换,因为这完全独立于应用程序本身。