Циклические ссылки - плохая практика?
Скажем, у меня есть три класса: EntityManager, Entity и Component.
Объект имеет массив компонентов (указателей), и каждый из этих компонентов имеет поле, которое является указателем на инкапсулирующий объект.
EntityManager имеет массив объектов, и каждый объект имеет указатель на свой инкапсулирующий EntityManager.
Причиной такого дизайна является надежность данных. Компонентам необходим доступ к полям инкапсулирующего объекта, а некоторые компоненты зависят от полей другого объекта (указатель на менеджер объекта).
Является ли этот "циклический" дизайн плохой практикой? Должен ли я переосмыслить свой дизайн?
1 ответ
Все циклическое плохо только в отношении ресурсов совместного использования / блокировки ресурсов, особенно в отношении многопоточности.
Кроме того, это даже не выглядит циклично. Это скорее параллельный дизайн, то есть, конечно, чтобы получить поля EntityManager, Компонент должен пройти через Entity. Или, чтобы получить Компонент, EntityManager должен пройти через Entity.
С точки зрения дизайна, я бы беспокоился о том, что произойдет, если вам нужно изменить поля EntityManager, от которых зависят Entity или Component?