Frage

Ich versuche zu vermeiden, eine zu erstellen Monsterklasse, und ich bemerkte ein nicht so gutes Muster und war neugierig, ob jemand Einblick in dieses Problem hatte.

Problem

A ist komplex.Um das „Gottobjekt“ zu vermeiden, wird ein Teil der Logik verdrängt B Und C.

A dient nun als Fassade.Es kommt auf B und C an.

A -> B
  -> C

Allerdings verfügt A über Konfigurationsdaten, die B und C benötigen.Wir müssen also die Daten synchron halten.

b.value1 = a.value1
b.value2 = a.value2

c.value1 = a.value1
c.value2 = a.value2

Außerdem müssen B und C die Daten konvertieren, um sie verwenden zu können.

b.sum -> b.value1 + b.value2
b.doSomething -> b.sum() ...

c.sum -> c.value1 + c.value2
c.doSomethingElse -> c.sum() ...

Um das Schreiben von doppeltem Code zu vermeiden, verschieben wir diese Konvertierungsmethoden zurück nach A.

a.sum -> a.value1 + a.value2

b.doSomething -> a.sum() ...
c.doSomethingElse -> a.sum() ...

Dies bedeutet jedoch, dass B und C jetzt von A abhängen und nicht nur von seinen Daten.

A -> B -> A
  -> C -> A

Und daraus ergibt sich eine zirkuläre Abhängigkeit.

Ich habe mich mit der Abhängigkeitsinjektion und dem Factory-Muster beschäftigt und diese beiden Ideen haben viele Probleme gelöst, aber ich bin ratlos, wie ich eine erstellen soll Objektgraph deren Knoten zur Laufzeit konfigurierbar sind.Mit anderen Worten: Ich brauche die Möglichkeit, das Verhalten eines bestimmten Knotens oder einer Gruppe von Knoten zur Laufzeit von außen zu ändern.Was ist der beste Weg, den Konfigurationsstatus in einem Objektdiagramm weiterzugeben?

Bearbeiten

Nachdem ich die letzten paar Stunden damit verbracht habe, meine Gedanken in eine Frage zu formulieren, denke ich, dass ich möglicherweise auf eine Lösung gestoßen bin.Ich denke, ich muss eine Konfigurationsanbieterklasse erstellen D Das wird an die Knoten weitergeleitet, die von diesen Informationen abhängen.

A -> B -> D
  -> C -> D
  -> D

D schafft es value1 Und value2 und bietet die sum Methode.D verfügt außerdem über Ereignisse, die ausgelöst werden, wenn sich Wert1 und Wert2 ändern, sodass abhängige Knoten (A, B und C) auf die Änderung reagieren können.

Ich denke, diese Lösung funktioniert, aber ich wollte trotzdem posten, falls es eine bessere Lösung gibt.Wenn dies Ist Das Muster, das ich suche, wie heißt es?Das „Anbieter“-Muster?(Nicht zu verwechseln mit ASP.NET Anbietermodell!)

War es hilfreich?

Lösung

Suchen Sie ein Beobachter- oder Vermittlermuster?Schau es dir an http://sourcemaking.com/design_patterns/observer

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top