Quando lavori con un singolo oggetto ci sono molti modi per separare le interfacce ad esso.
- Spezzandolo in componenti più piccoli che possono essere trattati indipendentemente.
- Trasformandolo in interfacce più semplici.
Entrambi questi sembrano difficili da fare con un albero. Penso che sarebbe bello poter fare quanto segue.
class Node : INodeData, INodePresentation { ... }
class Program
{
static void Main()
{
var node = new Node();
ManipulateNode(node);
PresentNode(node);
}
void ManipulateNode(INodeData nodeData)
{
foreach (INodeData child in nodeData.GetChildren())
nodeData.AddVertices(...);
nodeData.Rotate(...);
}
void PresentNode(INodePresentation nodePresentation)
{
nodePresentation.Color = Color.Blue;
nodePresentation.Size = 15;
nodePresentation.Paint();
foreach (INodePresentation child in nodePresentation.GetChildren())
PresentNode(child);
}
}
In questo modo, diverse parti del programma potrebbero utilizzare il nodo in base a un'interfaccia concisa. Ma ogni interfaccia che aggiungo richiederà più metodi nella classe Node che potrebbero essere non mantenibili. Sembra che la presentazione e i dati debbano essere definiti in classi separate, ma non riesco a pensare a un buon modo per farlo mantenendo la capacità di attraversare l'albero. Qualche suggerimento?