wir eine hierarchische Struktur haben, wo jeder Knoten von einem Knoten Basisklasse abgeleitet ist public Node(INodeFactory nodeFactory)
Die Fabrik eingespritzt wird, so dass die Knoten untergeordneten Knoten Get(int id)
Sollte ein Werk schafft immer ein neues Objekt
Zu einem späteren Zeitpunkt unter Verwendung erstellen können Einige Knoten benötigen eine Referenz auf einen anderen Knoten in der Struktur. Die Informationen, die zum Abrufen der Referenz erforderlich sind, können sich zur Laufzeit ändern und sind nicht unbedingt verfügbar, wenn das Knotenobjekt erstellt wurde. Grundsätzlich sieht diese Methodensignatur gleich aus und lautet Get(int id)
. Dieses Mal sollte kein neues Objekt erstellt werden, sondern ein vorhandenes Objekt sollte zurückgegeben werden.
Unser erster Versuch bestand darin, eine INodeLocator
zu übergeben, die nach dem Knoten suchen würde. Zunächst einmal sind wir uns nicht sicher, ob "Locator" ein guter Name ist und ob uns hier ein Muster fehlt, vielleicht das Repository-Muster (aber nur um nachzuschlagen?). Zweitens haben wir bemerkt, dass die Methodensignatur gleich ist.
Wir haben erwogen, die Fabrik von 'Erstellung' in 'Lookup' Modus zu wechseln, nachdem der ursprüngliche Baum erstellt wurde, aber das wird nicht funktionieren, da später auch Knoten erstellt werden müssen.
Für die "Lokator" -Logik dachten wir daran, durch die Knoten zu suchen (iterieren), aber vielleicht ist es besser, sie in einem flachen Wörterbuch zu verfolgen. Aber dann tritt das Problem auf, dass die Fabrik das Wörterbuch hinzufügen kann, aber nicht die Lebensdauer verwaltet. Was passiert, wenn ein Knoten entfernt wird?
Wie können wir für dieses Problem in angemessener Weise entwerfen?
Dies ist nicht der richtige Ort für Ihre Frage zu Softwareengineering.stackexchange.com wechseln –
Nach dem Lesen von https://meta.stackoverflow.com/questions/254570/choosing-between-stack-overflow-and-software-engineering I denke du hast wahrscheinlich recht. Ich habe dort nie gepostet. Soll das dann gelöscht werden? –
Ich denke, es sollte gelöscht werden. auch wenn es eine gute Frage ist, und wenn Sie auf softwareengineering.stackexchange.com schauen, haben Sie nicht die Schließen-Option –