我正在启动一个为我们的软件(.NET 3.5 / SQL Server 2008)创建“对象版本控制”功能的项目,基本上它需要这样做:
- 用户正在查看客户:
- 姓氏是“史密斯-约翰逊”
- 2个地址(保存在不同的表中)
- 购买了1 件产品
- 1个员工联系人(保存在不同的表中)
- 200 封邮件(保存在不同的表格中)
- 用户单击“查看过去状态”按钮并选择“ 2009 年 9 月 25 日 15:00 ”,这将打开一个显示同一客户的单独视图:
- 姓氏是“史密斯”(从那时起名字已经改变)
- 1 个地址(此后添加了一个地址)
- 购买了1 件产品(但与上述不同,因为他买了这个,后来退货又买了一个新的)
- 2 名员工联系人(因为此后其中一名已被删除)
- 10 封邮件
在思考这个问题时,一般会出现一些问题:
- 应该在什么级别记录更改,例如在数据库 级别(记录每个表的每个属性的每个更改)或对象级别(在更改后序列化和存储每个对象及其依赖项)
- 如何处理表结构的变化 ,例如,如果“姓氏”列更改为“姓氏”,如何跟踪列中的数据,因为它们都属于同一列(因此版本控制服务不会报告“这个客户在 9 月 25 日没有姓氏”,但知道查看姓氏。
- .NET / SQL Server 2008 领域中存在哪些支持技术可能支持这一点,例如我正在研究 SQL Server 2008 的更改跟踪功能
- 版本控制存在什么样的模式,例如,我正在考虑可用于在应用程序中创建撤消功能的命令模式。
- 此版本服务不需要执行回滚。它只需要能够显示对象的状态以及它们的依赖关系。
您在软件中实现版本控制功能的经验是什么?你有什么建议?