Questo sembra accadere ogni volta che creo qualsiasi tipo di GUI. Ho difficoltà a capire come le classi figlio dovrebbero comunicare ai loro fratelli.
È un problema generale, ma probabilmente è più facile usare un esempio concreto (speriamo che sia ancora ok per questo forum? So che è diverso da StackOverflow): Ho una finestra che contiene 4 pannelli. Al momento, ho semplicemente i figli come oggetti membri del genitore.
Le pressioni dei tasti cambiano tutti e 4 i pannelli, quindi ho gli oggetti figli che restituiscono l'evento ai loro genitori, che esegue la logica, quindi effettua le chiamate appropriate per ciascun pannello.
Tuttavia, gli eventi del mouse sono diversi. Cambiano la posizione di una telecamera (di proprietà del genitore), che ogni pannello utilizza per il rendering stesso. Quindi devo ricalcolare alcune matrici, al fine di rendere ogni pannello. Le matrici sono diverse per ciascun pannello. Il problema che sto avendo è: quando do ai bambini le matrici?
Penso di avere tre possibilità:
- Durante la lettura di un evento del mouse, calcola le matrici e i metodi di call setter per ciascun pannello. Tuttavia, a volte la matrice verrà sostituita prima del rendering della finestra.
- Assegna al pannello secondario un riferimento al genitore e, durante la chiamata di rendering, richiedi la matrice dal genitore (tramite metodo o variabile membro).
- Modifica child.render () in modo che accetti due parametri matrix e faccia in modo che parent.render () li chiami in modo appropriato.
# 2 sembra buono, perché non sto impostando inutilmente la matrice nella finestra figlia. Ma mi richiede anche di fare confusione con le dichiarazioni in avanti per gli oggetti membri, il che sembra una cattiva pratica. E # 3 Non sono abbastanza sicuro di come implementarlo, perché il rendering è chiamato da molte cose diverse dal mio codice (non minimizzando, per esempio), e non posso toccarle. Quindi suppongo che sia # 1?
Esiste un modello di progettazione che le persone solitamente seguono per questo? Sto solo pensando troppo e il # 1 è in realtà completamente OK?