Sto cercando di implementare una struttura dati ad albero che i chiamanti del mio codice pubblicano per farmi operare. L'idea è che il chiamante possa tenere un riferimento ai nodi dall'albero e modificare i loro dati (sia attributi che figli), il che innesca un evento che richiede al mio codice di aggiornare un rendering visivo dell'albero.
Il problema che ho è che ogni nodo deve anche contenere alcuni dati privati (un riferimento all'elemento visivo corrispondente) che non voglio avere l'inquinamento dell'interfaccia pubblica dell'oggetto nodo . I dati privati devono essere accessibili dalla classe principale che gestisce l'oggetto tree.
I potrebbe decidere di attaccare i dati privati alla mia interfaccia pubblica in questo modo:
class Node
{
public int NodeData;
public List<Node> ChildNodes;
public object PrivateVisualizationData;
}
class TreeControl
{
public Node RootNode;
// Use "PrivateVisualizationData" fields on node objects
}
Tuttavia, questo presenta due problemi mentre lo vedo:
- Ogni consumatore di
Node
vedrà il campoPrivateVisualizationData
, che potrebbe confondere - Il codice esterno potrebbe modificare i miei dati privati, interrompendo il codice che ne ha bisogno
Come potrei progettare questa struttura in modo che ogni nodo abbia dati personalizzati associati ad esso, ma i dati non sono accessibili esternamente? Vorrei evitare il costo di gestione di una tabella di ricerca separata, se possibile, ma potrebbe essere quello che finisco per fare.