收容和参考之间的ECore有什么区别?

时间:2010-09-25 11:02:40

标签: eclipse reference entity-relationship containment eclipse-emf-ecore

在ECore实体之间创建引用时,可以将引用标记为“包含”。 有人可以用简单的话来解释一下普通参考和遏制之间的区别吗?到目前为止,我发现的定义和解释对我来说并不起作用。

2 个答案:

答案 0 :(得分:43)

参考:引用是一个简单的“A knows B”关系。单独的引用不会相互影响。 A可以知道B和B可以知道C.因此,如果你有A,你可以通过B转到C.如果删除引用,A,B和C仍然存在,他们就不再相互了解了

遏制:遏制是“A有B”种关系。通常用于列表,例如“A有多个B”。然后,ECore / EMF可以对此类集合执行原子命令,例如将所有对象从一个包含移动到另一个包含。它还可以强制执行约束,例如最小数量的包含对象或最大数量的包含对象,或确保包含的对象不包含在任何其他包含中。

示例:

假设您有一个名为ShoppingCart的对象,其中包含名为Customer的引用和名为OrderedProducts的包含。 OrderedProducts引用了Product

这个型号告诉你什么?

  • 您可以将客户分配给ShoppingCart。如果从ShoppingCart中删除Customer,则Customer对象本身仍然存在(例如,在数据库中)
  • OrderedProduct对象需要存在ShoppingCart。如果从ShoppingCart中删除一个,它将不复存在。
  • 每个OrderedProduct都引用数据库中的现有产品。如果从ShoppingCart中删除其中一个OrderedProducts,数据库中的产品仍然存在 - 只是该特定客户的产品订单消失了

答案 1 :(得分:5)

参考:可以像UML中的关联

遏制:是来自UML的组合关系

这也可以在EMF图中看到,如果将containment设置为true,则该行将具有填充的一侧,显示包含/组合。这就是我所观察到的。