Domanda

Sto creando una gerarchia di oggetti che rappresenta una tabella disegnata su un controllo. La mia gerarchia è simile a questa:

Table has multiple pages
Page has multiple lines
Line has multiple cells
Cell has multiple glyph

Voglio avere un'opzione (un parametro) sulla tabella per filtrare la colonna (celle) visualizzata. Il codice client può fare qualcosa del genere:

myTable.ShowColumns(8,12) // Will display columns 8 to 12

La visualizzazione e il posizionamento delle celle sul controllo è responsabilità degli oggetti Lines. Come posso passare le informazioni su quali celle devono essere visualizzate dall'oggetto Table all'oggetto Line?

Devo dare ad ogni riga un riferimento all'oggetto tabella? Dovrei provare a passare le informazioni a ciascuna riga attraverso la gerarchia ogni volta che viene chiamato Table.ShowColumns () ?

Deve esserci un modo elegante?

È stato utile?

Soluzione

Non penso che sia necessario un modello di progettazione. (O non lo definirei così) Perché non usi semplicemente il doppio collegamento in cui i bambini si collegano al genitore e viceversa?

Altri suggerimenti

Se capisco correttamente, quelli che definisci antenati sono in realtà genitori nella tua gerarchia - che in effetti se non altro che un albero . E con gli alberi è pratica comune fare in modo che i nodi figlio facciano riferimento ai rispettivi genitori.

Per quanto riguarda il design della funzione ShowColumns, penso che dovrebbe modificare una variabile di stato interna della classe Lines (che contiene le celle) in virtù di una chiamata di funzione interna simile sulla classe Lines.

// something like this..
Table.ShowCollumns -> Table.m_lines.SetVisibleColumns -> (modify visible columns)

Ovviamente, a seconda della mappatura logica delle colonne alle pagine e delle pagine alle tabelle, potrebbe essere necessario intercettare un'altra chiamata prima di chiamare SetVisibleColumns sulla classe Linee , per trovare l'oggetto pagina corretto: Table.FindPageWithColumns (...) e quindi operare su quello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top