您需要定义“合并”对您意味着什么。您可以轻松地将所有 EMF 模型附加到同一资源并对其进行序列化。
您可能希望在模型 1 和模型 2 之间建立等价关系。在model1和model2之间找到一些相等的对象。在此之后,您可以找到差异。
举个例子:
Model1 is a FARM with serial number 33829. Children: 2 CHICKENS, 3 EGGS and 1 PIG
Model2 is a FARM with serial number 33829. Children: 4 CHICKENS, 3 EGGS and 1 PIG
匹配步骤建立了以下等价性:
Model1->FARM = Model2->FARM because serial number is equal
all other entities have not been matched
在此步骤之后是差异步骤:
REMOVED: 2 CHICKENS, 3 EGGS, 1 PIG
ADDED: 4 CHICKENS, 3 EGGS, 1 PIG
使用这些差异,您可以将它们应用于您的模型。仅应用“添加”差异可为您提供以下模型:
Model1+2 is a FARM with serial number 33829. Children: 2 CHICKENS, 3 EGGS, 1 PIG, 4 CHICKENS, 3 EGGS, 1 PIG
由您决定“合并”的业务规则。您首先必须确定两个实体何时相同(匹配)。这可以基于唯一键、它们在树中的位置或基于许多其他事物,具体取决于您的元模型。
结果,您将获得一个“差异”列表。由您决定应用哪些差异。
如果您将“合并”视为 SVN 合并(即 Model1 = Model0 + 更改,Model2 = Model0 + 其他更改),那么MergeService
已经包含执行此操作的所有业务规则。