.net - 寻找在我们的应用程序中实现版本控制功能的建议

标签 .net design-patterns sql-server-2008 architecture application-design

我正在启动一个项目来为我们的软件(.NET 3.5/SQL Server 2008)创建一个“对象版本控制”功能,基本上它需要这样做:

  • 用户正在查看 客户 :
  • 姓氏是“ 史密斯-约翰逊
  • 2 个地址 (保存在不同的表中)
  • 1 个产品 已购买
  • 1 名员工联系方式 (保存在不同的表中)
  • 200 封邮件(保存在不同的表格中)
  • 用户点击“ 查看过去状态 ” 按钮并选择“ 2009 年 9 月 25 日 15:00 ”,这会显示一个单独的 View ,显示同一客户:
  • 姓氏是“ Smith ”(此后名称已更改)
  • 1 地址 (从那时起添加了地址)
  • 1 个产品 购买了(不过是不一样上面说的是他买了这个,后来退了又买了新的)
  • 2 名员工联系人 (因为从那以后删除了一个)
  • 10 封邮件

  • 在考虑一般问题时,会出现一些问题:
  • 应该在什么级别记录更改,例如在 数据库 级别 (记录每个表的每个属性的每个更改)或 对象级别 (更改后序列化并存储每个对象及其依赖项)
  • 怎么会结构变化 被处理,例如如果列“LastName”更改为“Surname”,如何跟踪列中的所有数据都属于同一列(因此版本控制服务不会报告“此客户在 9 月 25 日没有姓氏”而是知道查看姓氏。
  • 什么支持技术在 .NET/SQL Server 2008 区域中存在可能支持这一点,例如我正在查看 Change Tracking SQL Server 2008 的功能
  • 版本控制存在什么样的模式,例如我在想 命令模式 可用于在应用程序中创建撤消功能。
  • 此版本服务做 不是 需要执行回滚。它只需要能够显示 对象的状态和它们的依赖关系。

  • 您在软件中实现版本控制功能的经验是什么?你有什么建议?

    最佳答案

    我曾开发过具有类似功能的软件。

    不是在数据库中更新数据,而是将每个更改作为新记录插入。数据库中的每一行都有一个开始日期和一个结束日期。

    最新记录是没有结束日期的记录。从那里,您可以通过搜索当时处于事件状态的记录来查询任何给定日期的数据状态。

    明显的缺点是存储,以及您必须抽象数据层的某些方面以使历史跟踪对调用它的人透明的事实。

    关于.net - 寻找在我们的应用程序中实现版本控制功能的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1687801/

    相关文章:

    java - 类类型变量或在构造函数/方法中实例化之间有什么区别

    c++设计模式问题。单一接口(interface)多种实现?

    sql - 如何计算 SQL Server 2008 中所需的日期?

    .net - RegularExpressionValidator 是否使用 Regex 以外的其他风格?

    c# - 如何使用正则表达式从SQL语句中提取参数名称

    c++ - 具有多个指针的 Pimpl

    sql-server - 比较sql server中同一表的每条记录并返回重复项

    sql - 使用表名删除超过 12 个月的表

    c# - 如何在 System.Diagnostics 跟踪日志中设置翻转策略

    c# - 哪种日期和时间格式与其他平台最兼容?