java - 域模型的版本控制

标签 java algorithm svn version-control versioning

我为我自己的域模型实现版本控制(在更新操作期间跟踪对象的差异)。领域模型具有树结构。例如。 (-> 为引用)

A
|-> B
|-> C -> A
    | -> C

版本控制要求如下:

  • 获取域对象两个版本之间变化的字段集合;
  • 领域模型具有树状结构;
  • 字段可以组织成列表。在下面的示例中,系统应该显示 Y 元素已被删除(但不是 Z 已删除并且 Y 更改了其在 Z 上的状态)并且 X 已更改:

      [ v1 ]              [ v2 ]
        A                    A
        |-> [X, Y, Z]        |-> [X, Z]
             |-> C                |-> M
  • 不再有锁定/合并/分支等要求。

我研究了在同一对象的两个状态之间获取更改集的方法。我使用 Java 并对现有方法/解决方案感兴趣。例如。我正在寻找 subversion 用于创建下一个修订版的算法的描述。

我很乐意从您那里得到任何理论或实践建议。

谢谢

最佳答案

我怀疑您的域模型不是使用文本文件表示的,而是作为对象模型很可能保存在关系数据库中。我们目前正在设计这个并且已经制作了原型(prototype)。

我的经验教训:

  1. 您需要准确描述版本控制需要哪些功能,不需要哪些功能。仅记录更改很容易,提供带排他锁定的标记版本和分支很难,提供合并非常困难。
  2. 可以使用触发器在数据库级别实现日志记录。为所有域对象创建表,如果添加/编辑/删除条目,则记录完整条目。根据需要附加信息(时间...)。可能需要每个用户都以自己的数据库用户身份登录数据库,这样您就可以查询 CURRENT_USER 来记录他。
  3. 您可以记录属性的修改,而不是在更改编辑之前/之后记录。但这将创建更多的日志条目,并且为特定提交收集所有更改的成本很高。
  4. 对象的锁定可以通过方法调用(锁定/解锁)来完成。可以再次使用触发器在数据库级别检查锁(获取 CURRENT_USER 并检查他是否已锁定对象)。这样做的好处是用户代码不必查询对象是否被锁定,但数据库会阻止插入/编辑/删除。不使用锁定将要求您实现合并。这将非常困难,因为您使用的不是文本文件,而是高度结构化的数据。
  5. 将版本控制与您的领域模型相结合可能会非常棘手。特别是如果您需要不要让版本控制泄漏到您的域模型中(如果您计划重用版本控制系统)。制作原型(prototype)!

关于java - 域模型的版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910925/

相关文章:

java - 使用 MapReduce View 查询 Couchbase Lite 问题

java - setOnClickListener 未使用自定义适配器和自定义 ListView 触发

svn - 将存储库从 Mercurial 转换为 Subversion 时如何保留修订时间戳?

svn - svn copy有什么用?

java - 为 SQuirreL SQL 客户端分配更多内存

java - openfire smack发送包404错误是什么意思?

Java:如何遍历类型链接列表的数组并将它们附加到数组

algorithm - 使用来自Delphi的Tomes的红黑树实现的Promote()问题

algorithm - 从三个点/角度中识别弧的起点和终点

使用非标准布局的 Git-svn 迁移不显示 merge