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

标签 c# sql git database-design architecture

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

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

我也考虑过单独跟踪更改并在请求版本时重建产品,但实现起来似乎相当复杂,并且要正确处理多层嵌套关系。

或者

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

最佳答案

VCS 工具不是为此目的而设计的。这是一个应用程序功能(版本历史),应该这样对待。实现这一点的正确方法是为每个版本化项目类型创建一个“存档”表,并通过 ID 将它们与当前“实际”项目相关联。

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

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

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

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

关于c# - 具有多级嵌套关系版本控制的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309255/

相关文章:

c# - HttpWebRequest 收到 "WebException: The request timed out"

c# - 使用 twilio 发送 SMS 短信不起作用

java - Android 数据库更新不起作用

c# - 具有多对多关系的多个结果

git - Android Studio中可以显示Git的Tag名称吗?

bash - 授权bash访问GitHub protected 分支

c# - 如何在 Windows PowerShell 4.0 中执行短路评估?

c# - 创建自定义 winforms 容器

java - JDBC 中 Types.NULL 的使用

git - 当用户按下git时,它会锁定 Remote 以进行写入吗?