Eu tenho uma situação em que meus pais sabem sobre o filho (duh), mas eu quero que o filho possa fazer referência ao pai. A razão para isso é que eu quero que a criança tenha a capacidade de se designar como mais importante ou menos importante quando lhe apetecer. Quando a criança faz isso, ela a move para a parte superior ou inferior dos filhos dos pais.
No passado, usei uma propriedade WeakReference na criança para me referir ao pai, mas acho que isso acrescenta uma sobrecarga irritante, mas talvez seja a melhor maneira de fazê-lo.
Isso é apenas uma má ideia? Como você implementaria essa capacidade de maneira diferente?
Atualização 1: Adicionando mais contexto. Como é um sistema de renderização, o contêiner pai é uma lista de janelas agrupadas. O item filho (janela) que diz "Eu sou mais importante!" quer basicamente ser renderizado no topo das demais janelas.
O pai é apenas um contêiner lógico para agrupar esses filhos. Posso ver onde é uma boa ideia adicionar um evento para sinalizar a solicitação de estar no topo. Mas a implementação (o que a criança quer fazer com os pais) à parte, por que você não gostaria de ter um vínculo entre filhos e pais? Listas duplamente vinculadas fazem isso para que as pessoas possam passar de e para algo.
fonte
WeakReference
. O coletor de lixo .net pode lidar com ciclos. Se o filho não estiver mais em uso (o pai não está apontando para ele), ele será coletado apesar de conter uma referência ao pai.Respostas:
Muitas vezes.
Como isso melhora? A criança não deve saber ou se importar que esteja em uma coleção. Em vez de se considerar importante, deve sinalizar que aconteceu algum evento para que quem se importa (os pais) possa aumentar sua prioridade (ou quaisquer que sejam as regras para o contexto em que a criança vive). Não estou empolgado com isso e talvez prefira uma melhor separação de preocupações entre o modelo da criança e o comportamento importante, mas não posso elaborar sem mais contexto.
[editar:]
Sim, os sistemas de renderização são um caso em que a propriedade dos pais ... bem, não quero dizer que faz sentido, mas é um caso em que isso foi feito e não é o fim do mundo. Para dar um foco de controle, eu ainda preferiria o design em que o manipulador de entrada (ou qualquer outra coisa) anda na árvore e sabe qual coleção reordenar, em vez de encontrar a criança, chamando algo nela que sabe ir para o pai.
fonte
Como a execução chegou ao ponto em que o filho decide que quer ser mais importante? Chegou lá através dos pais? Se sim, você pode enviar referência ao pai para esse método.
por exemplo. se todos os nós tiverem algum tipo de método update () que faça algo como
você pode mudar para
fonte
Não acho que seja uma má ideia. Você pode resolver isso adicionando um valor de ordem de classificação a cada filho. Estou visualizando algo como "z-index" usado para exibir objetos em cima ou atrás um do outro em páginas da web.
Não tenho certeza de como você codificaria algo assim, mas o conceito parece viável.
fonte