J'ai une situation où mon parent connaît son enfant (duh) mais je veux que l'enfant puisse faire référence au parent. La raison en est que je veux que l'enfant ait la capacité de se désigner comme le plus important ou le moins important quand il en a envie. Lorsque l'enfant fait cela, il le déplace vers le haut ou le bas des enfants du parent.
Dans le passé, j'ai utilisé une propriété WeakReference sur l'enfant pour renvoyer à son parent, mais je pense que cela ajoute une surcharge ennuyeuse, mais c'est peut-être juste la meilleure façon de le faire.
Est-ce juste une mauvaise idée? Comment mettriez-vous en œuvre cette capacité différemment?
Mise à jour 1: ajout de plus de contexte. Il s'agit d'un système de rendu, le conteneur parent est donc une liste de fenêtres regroupées. L'élément enfant (fenêtre) qui dit "Je suis le plus important!" veut essentiellement être affiché en haut du reste des fenêtres.
Le parent est juste un conteneur logique pour regrouper ces enfants. Je peux voir où l'ajout d'un événement pour signaler la demande d'être au sommet est une bonne idée. Mais la mise en œuvre (ce que l'enfant veut faire avec le parent) à part, pourquoi ne voudriez-vous pas que le lien enfant-> parent soit établi? Les listes doublement liées le font pour que les gens puissent aller vers et depuis quelque chose.
la source
WeakReference
. Le garbage collector .net peut gérer les cycles. Si l'enfant n'est plus utilisé (le parent ne le pointe pas), il sera collecté malgré le fait qu'il contienne une référence au parent.Réponses:
Souvent.
Comment faire mieux? L'enfant ne doit pas savoir ou se soucier qu'il se trouve dans une collection. Au lieu de se considérer comme important, cela devrait signaler qu'un événement dont il a connaissance s'est produit afin que quiconque s'en soucie (le parent) puisse augmenter sa priorité (ou quelles que soient les règles du contexte dans lequel l'enfant vit). Je ne suis pas ravi de cela et préférerais peut-être une meilleure séparation des préoccupations entre le modèle de l'enfant et le comportement important, mais je ne peux pas élaborer sans plus de contexte.
[Éditer:]
Oui, les systèmes de rendu sont un cas où la propriété parentale ... eh bien je ne veux pas dire est logique, mais c'est un cas où cela a été fait et n'est pas la fin du monde. Pour donner un focus de contrôle, je préférerais toujours la conception où le gestionnaire d'entrée (ou autre) parcourt l'arbre et sait quelle collection réorganiser plutôt que de trouver l'enfant, appelant quelque chose dessus qui sait aller à son parent.
la source
Comment l'exécution est-elle arrivée au point où l'enfant décide qu'il veut être le plus important? Est-il arrivé par le parent? Si oui, vous pouvez envoyer une référence au parent de cette méthode.
par exemple. si tous les nœuds ont une sorte de méthode update () qui fait quelque chose comme
vous pouvez le changer en
la source
Je ne pense pas que ce soit une mauvaise idée. Vous pouvez résoudre ce problème en ajoutant une valeur d'ordre de tri à chaque enfant. J'imagine quelque chose comme "z-index" utilisé pour afficher des objets l'un sur l'autre ou derrière les autres dans les pages Web.
Je ne sais pas comment vous coderiez quelque chose comme ça, mais le concept semble réalisable.
la source