【问题标题】:Using Javers to compute difference using metamodel使用 Javers 使用元模型计算差异
【发布时间】:2018-02-15 15:36:37
【问题描述】:

Javers 是否可以使用元模型之类的类/对象而不是具体的 Java 类来计算差异?

到目前为止,我的研究使我相信 Javers 差异仅适用于实现为具体 Java 类的模型。

java-object-diff 库类似。


我有一个元模型,其中单个模型包含与使用 Java 反射 API(即类、字段)所获得的信息大致相似的信息。我也有模型对象实例,它们类似于 Java 对象(即类的实例)。元模型和模型对象实例都是 Java 类,但这些类本身是一般重用的建模类,本身无趣。

我预计必须进行相当多的接线才能将元模型的细节暴露给差分算法,这相当于从 Java 反射 API 和通常的 Java 对象语义中获得的结果。如:

  • 什么是实体?
  • 什么是实体属性?
  • 什么是属性的基数? (例如,一、多/集合/列表/数组)。
  • 属性值是什么类型,实体或非实体(例如原始)。该属性是另一个实体还是非实体(例如原始)?
  • 提供一种读取给定实体实例的属性值的方法。
  • “相同”的定义是什么?
  • “相等”的定义是什么?
  • “可比”的定义是什么?
  • 在区分集/集合时支持复杂的相关性(例如相似性度量),而不仅仅是标准的“相等性”。

等等

【问题讨论】:

    标签: java metamodel javers


    【解决方案1】:

    JaVers 在内部使用元模型来比较用户的对象。 用户的对象映射到Cdo 抽象。 (见https://javers.org/javadoc_3.x/org/javers/core/metamodel/object/Cdo.html) 然后比较 Cdo 实例。

    所以,整个 diff 算法都是基于元模型的。但是,它是 JaVers 的元模型。 JaVers 准备好处理任何类型的元模型了吗?应该不会吧。

    JaVers 准备好处理您的元模型了吗?没有看到就很难说,但我怀疑。

    我可以建议,尝试将您的元模型转换为 JaVers 的元模型。提供Cdo 实例,例如CdoSnapshot 并进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多