Какая разница в ECore между защитой и справкой? - PullRequest
21 голосов
/ 25 сентября 2010

При создании ссылок между сущностями ECore существует возможность пометить ссылку как «сдерживающую». Может ли кто-нибудь объяснить мне в простых словах, в чем разница между простой ссылкой и сдерживанием? Определения и объяснения, которые я нашел до сих пор, не помогли мне.

Ответы [ 2 ]

43 голосов
/ 25 сентября 2010

Ссылка: Ссылка - это простое "A знает B" отношение.Отдельные ссылки не влияют друг на друга.A может знать B, а B может знать C. Следовательно, если у вас есть A, вы можете перейти к C над B. Если вы удалите ссылку, A, B и C все еще будут существовать, они просто больше не будут знать друг друга.

Сдерживание: Сдерживание - это вид "A имеет B" .Обычно используется для списков, например, «A имеет несколько B».ECore / EMF может затем выполнять атомарные команды в таких коллекциях, например, перемещать все объекты из одного контейнера в другой.Он также может применять ограничения, такие как минимальное количество содержащихся объектов или максимальное количество содержащихся объектов, или обеспечение того, чтобы содержащийся объект не содержался ни в каком другом контейнере.

Предположим, у вас есть объект с именем ShoppingCart со ссылкой, называемой Customer, и контейнер с именем OrderedProducts.OrderedProducts имеет ссылку на Product.

О чем говорит эта модель?

  • Вы можете назначить Клиента в ShoppingCart.Если вы удалите Customer из ShoppingCart, сам объект Customer все еще будет существовать (например, в базе данных)
  • Для объектов OrderedProduct требуется ShoppingCart.Если вы удалите один из ShoppingCart, он прекратит свое существование.
  • Каждый заказанный продукт имеет ссылку на существующий продукт в базе данных.Если вы удалите один из OrderedProducts из ShoppingCart, продукт в базе данных все равно будет там - только заказ этого продукта для этого конкретного клиента пропал
5 голосов
/ 29 июня 2012

Ссылка : может быть как ассоциация в UML

Сдерживание : это соотношение композиции из UML

Также это можно увидеть на диаграмме ЭМП, если вы установите containment в значение true, тогда линия будет иметь заполненную сторону, показывая содержание / состав. Это то, что я наблюдал.

...