Link Child to Parent - má ideia?

15

Eu tenho uma situação em que meus pais sabem sobre seu filho (duh), mas eu quero que o filho seja capaz de fazer referência ao pai. A razão para isso é que eu quero que a criança tenha a capacidade de designar a si mesma como mais importante ou menos importante quando se sentir assim. Quando a criança faz isso, ela é movida para o topo ou a base dos filhos do pai.

No passado, usei uma propriedade WeakReference no filho para me referir ao pai, mas sinto que isso adiciona uma sobrecarga irritante, mas talvez seja a melhor maneira de fazê-lo.

Isso é apenas uma má ideia? Como você implementaria essa habilidade de forma diferente?

Atualização 1: Adicionando mais contexto. Este é um sistema de renderização, portanto, 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 do resto das janelas.

O pai é apenas um contêiner lógico para agrupar esses filhos. Eu posso ver onde adicionar um evento para sinalizar o pedido para estar no topo é uma boa ideia. Mas a implementação (o que a criança quer fazer com o pai / mãe) de lado, por que você não gostaria de ter um link filho-pai? As listas duplamente vinculadas fazem isso para que as pessoas possam atravessar para e de alguma coisa.

    
por Thraka 22.11.2012 / 03:33
fonte

3 respostas

17

Is this just a bad idea?

Muitas vezes.

  • Ele interrompe o encapsulamento do pai.
  • Aumenta o acoplamento em ambos.
  • Serve como um ponto de fuga para a criança chegar ao resto do sistema, aumentando o acoplamento com qualquer coisa vagamente próxima (porque as pessoas irão abusar dessa referência)
  • Limita seu design se você quiser filhos sem pais.

Como isso é melhor? A criança não deve saber ou se importar que esteja em uma coleção. Em vez de considerar-se importante, deve sinalizar que algum evento que ele conhece aconteceu para que quem se importa (os pais) possa aumentar sua prioridade (ou qualquer que seja a regra para o contexto em que a criança vive). Não estou entusiasmado com isso, e talvez preferiria uma melhor separação das preocupações entre o modelo da criança e o comportamento de importância, mas não pode elaborar sem mais contexto.

[editar:]

Sim, os sistemas de renderização são um caso em que a propriedade dos pais ... bem, eu não quero dizer que faz sentido, mas é um caso em que foi feito e não é o fim do mundo. Para dar um foco de controle, eu ainda preferiria o design onde o manipulador de entrada (ou o que quer que) andasse na árvore e soubesse qual coleção reorganizar em vez de encontrar o filho, chamando algo que sabia ir para seu pai.

    
por 22.11.2012 / 04:10
fonte
0

Como a execução chegou ao ponto em que a criança decide que ela quer ser mais importante? Chegou lá através dos pais? Se sim, você poderia enviar uma 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

void update() {
    doSomething()
    for(Node n:childs){
        //do something
        n.update();
    }
}

você pode alterá-lo para

void update(Node parent) {
    doSomething(parent)
    for(Node n:childs){
        //do something
        n.update(this);
    }
}
    
por 22.11.2012 / 11:43
fonte
0

Eu não acho que seja uma má ideia. Você poderia resolver isso adicionando um valor de ordem de classificação a cada filho. Eu estou visualizando algo como "z-index" usado para exibir objetos ontop-of ou uns atrás dos outros em páginas da web.

Não sei como você codificaria algo assim, mas o conceito parece viável.

    
por 22.11.2012 / 14:32
fonte