Non, je ne pense pas que ce soit un mauvais design. Cela ressemble à une relation parent-enfant (qui est 1-à-1) où l'enfant a un pointeur vers le parent. La raison principale pour une telle conception est si quelqu'un pourrait obtenir une référence à Y
sans passer par X
. Si tous les accès à Y
sont effectués uniquement via X
, une telle référence est plus discutable. Comme Billy ONeal le signale, un exemple pourrait être un itérateur qui doit pouvoir référencer la collection à laquelle il appartient. Cela pourrait permettre d'avoir un itérateur dans un tableau qui n'a pas besoin d'être invalidé lorsque le tableau est redimensionné, car il vérifierait l'adresse du tampon courant du tableau et la taille actuelle de chaque accès.
Un autre exemple pourrait être une classe OrderLine
(votre X
) qui contient une référence à l'élément et compte la quantité, etc. Il dispose également d'un membre de type en option DigitalLicense
(votre Y
). DigitalLicense
contient une grande description cryptée de la licence, donc il est seulement inclus dans ceux OrderLines
qui correspond à un produit avec une licence numérique.
Par construction, une référence au DigitalLicense
est également placée dans une carte distincte, saisie sur l'ID de licence. Il est maintenant possible de rechercher un DigitalLicense
en fonction de l'ID de licence dans la carte. Ensuite, la référence arrière est utilisée pour passer du DigitalLicense
au OrderLine
. Si le OrderLine
a une référence arrière similaire, il est également possible de revenir au Order
.
Oui. Oui. –
@Amardeep: Voulez-vous élaborer? –
'x = value' doit être dans une liste d'initialisation, sinon cela ne sera pas compilé. :-) – Thanatos