为什么没有Javers报告比较两个对象时添加的正确行?

时间:2017-07-19 15:14:36

标签: javers

当比较两个相同大小的对象时,Javers比较1比1。但是,如果向其中一个对象添加了新更改(例如新行),则比较报告的更改不会更改。为了比较相似的对象,是否有可能让Javers忽略添加/删除?

基本上指数不同步。

Row  Name  Age Phone(Cell/Work)
 1    Jo    20  123
 2    Sam   25  133
 3    Rick  30  152
 4    Rick  30  145

新列表

Row  Name  Age Phone(Cell/Work)
 1   Jo    20  123
 2   Sam   25  133
 3   Bill  30  170
 4   Rick  30  152
 5   Rick  30  145

因为添加了比尔,新的比较结果会说第4,5行在实际上没有改变。

感谢。

1 个答案:

答案 0 :(得分:0)

我猜你的'行'是表示excel表中行的对象,你已将它们映射为ValueObjects并将它们放入某个列表中。

由于ValueObjects没有自己的身份,因此即使对于人类来说,也不清楚实际的变化是什么。看看你的第4行:

Row  Name  Age Phone(Cell/Work)
before:
4   Rick  30  145
after:
4   Rick  30  152

您是否将第4行的电话从145更改为152?或者您可能在第4行插入了新数据?我们怎么知道? 我们做不到。默认情况下,JaVers选择最简单的答案,因此报告索引4处的值更改。

如果您不关心索引,可以将列表比较算法从Simple更改为Levenshtein distance。见https://javers.org/documentation/diff-configuration/#list-algorithms

SIMPLE算法为移位的元素生成更改(如果在列表中间插入或删除元素)。相反,即使在元素移位的情况下,Levenshtein算法也会计算短而清晰的变化列表。它并不关心转移元素的索引更改。

但是,我不确定Levenshtein是否为ValueObjects实现,如果尚未实现,它是对javers-core的功能请求。