Нет, я не думаю, что это плохой дизайн. Это похоже на отношения родитель-потомок (то есть 1-к-1), где у дочернего элемента есть указатель на родителя.
Основная причина такого дизайна заключается в том, что кто-то может получить ссылку на Y
без указания X
. Если весь доступ к Y
осуществляется только через X
, такая ссылка более сомнительна.
Как указывает Билли ONeal, одним из примеров может быть итератор, который должен иметь возможность ссылаться на коллекцию, которой он принадлежит. Это может сделать возможным создание итератора в массиве, который не нужно аннулировать при изменении размера массива, поскольку он будет проверять текущий адрес буфера массива и текущий размер при каждом доступе.
Другим примером может быть класс OrderLine
(ваш X
), который содержит ссылку на элемент, количество и т. Д. Он также имеет необязательный элемент типа DigitalLicense
(ваш Y
). DigitalLicense
содержит большое зашифрованное описание лицензии, поэтому оно включено только в те OrderLines
, которые соответствуют продукту с цифровой лицензией.
В процессе строительства ссылка на DigitalLicense
также помещается в отдельную карту с указанием идентификатора лицензии. Теперь можно искать DigitalLicense
на основе идентификатора лицензии на карте. Затем обратная ссылка используется для перехода от DigitalLicense
к OrderLine
. Если у OrderLine
есть аналогичная обратная ссылка, можно также вернуться к Order
.