Какая разница в ECore между защитой и справкой?
При создании ссылок между объектами ECore существует возможность пометить ссылку как "сдерживающую". Может ли кто-нибудь объяснить мне в простых словах, в чем разница между простой ссылкой и сдерживанием? Определения и объяснения, которые я нашел до сих пор, не помогли мне.
2 ответа
Ссылка: Ссылка представляет собой простое отношение "А знает В". Отдельные ссылки не влияют друг на друга. A может знать B, а B может знать C. Следовательно, если у вас есть A, вы можете перейти к C над B. Если вы удалите ссылку, A, B и C все еще будут существовать, они просто больше не будут знать друг друга,
Сдерживание: сдерживание - это отношение типа "А имеет В". Обычно используется для списков, например, "A имеет несколько B". ECore/EMF может затем выполнять атомарные команды в таких коллекциях, например, перемещать все объекты из одного контейнера в другой. Он также может навязывать ограничения, такие как минимальное количество содержащихся объектов или максимальное количество содержащихся объектов, или гарантировать, что содержащийся объект не содержится ни в каком другом контейнере.
Пример:
Предположим, у вас есть объект с именем ShoppingCart
со ссылкой под названием Customer
и сдерживание называется OrderedProducts
, OrderedProducts
имеет ссылку на Product
,
Что эта модель говорит вам?
- Вы можете назначить Клиента в ShoppingCart. Если вы удалите Customer из ShoppingCart, сам объект Customer все еще будет существовать (например, в базе данных).
- Для объектов OrderedProduct необходима корзина ShoppingCart. Если вы удалите один из ShoppingCart, он перестанет существовать.
- Каждый заказанный продукт имеет ссылку на существующий продукт в базе данных. Если вы удалите один из OrderedProducts из ShoppingCart, продукт в базе данных все еще будет там - только заказ этого продукта для данного конкретного клиента исчез
Ссылка: может быть как ассоциация в UML
Сдерживание: это композиционное отношение из UML
Также это можно увидеть на диаграмме ЭДС, если вы установите containment
Значение true, тогда строка будет иметь заполненную сторону, показывающую содержание / состав. Это то, что я заметил.