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

Kos*_*801 21 eclipse entity-relationship reference containment eclipse-emf-ecore

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

mha*_*ler 43

参考:参考是一个简单的"A know 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,数据库中的产品仍然存在 - 只是该特定客户的产品订单消失了


Dan*_*loi 5

参考:可以像UML中的关联

遏制:是UML的组合关系

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