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