我正在开始为我们的软件(.NET 3.5 / SQL Server 2008)创建“对象版本控制”功能的项目,基本上它需要这样做:
一般来说,在考虑问题时会出现一些问题:
您在软件中实施版本控制功能的经验是什么?你有什么建议?
答案 0 :(得分:2)
我从事过具有类似功能的软件。
不是在数据库中更新数据,而是将每个更改作为新记录插入。数据库中的每一行都有一个开始和结束日期。
最新记录是没有结束日期的记录。从那里,您可以通过搜索当时处于活动状态的记录来查询任何给定日期的数据状态。
显而易见的缺点是存储,以及您必须抽象数据层的某些方面,以使历史跟踪对任何调用它的人都是透明的。
答案 1 :(得分:2)
Martin Fowler在开发下一版企业应用程序架构模式时记录了一些有趣的模式,您可能会感兴趣:
答案 2 :(得分:1)
几年前,我设计了一个版本对象系统,以便在不同环境(Dev,Staging,QA,Production)中的数据库之间复制它们
我当时使用手动AOP方法。 Spring.NET或其他支持AOP的IoC框架今天会更好。对对象属性的每个修改都存储为集中式数据库中的更改。每个更改都有一个版本号。我们使用Change(s)记录对一个数据库中的对象采取的操作,并在目标中重放它们,有效地复制更改。
如果您正在使用ORM,那么您应该能够更改数据库中的列名,而不必担心如果您使用此类解决方案的属性名称。如果您确实更改了属性名称,则可以使用新名称更新更改记录。
许多人采用了一种方法,但它对我们来说效果很好,我认为这对你的案子来说可能是一个好的开始。