我有一个复杂的对象结构,它具有描述产品配置的多级嵌套关系。配置随时间变化,我需要能够在将来的任何时间引用不同的配置。在任何时候,整个系统都链接到产品的特定版本,并以某种方式抽象出产品版本的整个概念。
实现此目的最直接的方法是每次请求新版本时克隆产品的整个结构,并将不同版本链接在一起。然而,就数据库负载而言,这是否过分。还有更好的方法吗?
我还考虑过单独跟踪更改并在请求版本时重新构建产品,但实现起来似乎相当复杂,并且可以使用多级嵌套关系。
或者
在数据库中保存最小的元数据,以使用GIT等工具跟踪版本并序列化整个产品结构。
答案 0 :(得分:0)
VCS工具不是为此目的而设计的。这是一个应用程序功能(版本历史记录),应该这样对待。实现此目的的正确方法是为每个版本化项目类型创建“归档”表,并通过ID将它们与当前“实际”项目相关联。
然后,只要项目发生更改,请在将项目更改提交到主项目表之前获取其当前状态并更新存档。
要做的重要区别是,这不是存储 C#对象的版本历史记录的情况,它是用于存储概念最终用户“项目的版本历史记录的应用程序功能“在你的申请中。 “产品历史”和“产品对象历史”不是一回事;你想要实现前者。您的对象状态和它们实际表示的项目是两个不同的东西。
Git等版本控制工具用于存储应用程序本身的修订版,而不是为应用程序正在使用的数据提供存档功能。这属于数据库。
或者,如果问题是能够将数据回滚到特定时间点,那么这应该通过记录数据库的日期标记快照来实现,这些快照可以根据需要进行换出,因为这完全是独立于应用程序本身。