3

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?

+0

Dies ist nicht der richtige Ort für Ihre Frage zu Softwareengineering.stackexchange.com wechseln –

+0

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? –

+0

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 –

Antwort

0

Unterscheiden Sie diese beiden Funktionen durch Namen, und fügen Sie beide zu Ihrer "Fabrik" hinzu (die einen anderen Namen verdienen könnte). Z.B.

public interface INodeFactory 
{ 
    // creates a new Node and returns it 
    Node Create(int id); 

    // retrieves an existing node 
    Node Get(int id); 

    // deletes a Node 
    void Delete(int id); 
} 

Eine Implementierung hält eine Art Wörterbuch intern mit der ID der Schlüssel zu sein, und der Knoten sowie eine Angabe, ob es bereits gelöscht wurde der Wert ist.

Ich bevorzuge es, beide Funktionen in einer Klasse zu halten, da hier ein neu erstellter Knoten gespeichert werden kann und somit Inkonsistenzen einfach vermieden werden können.

Verwandte Themen