Ich habe zwei Client-Typen, einen " Observer " -Typ und einen " Subject " -Typ. Sie sind beide einer Hierarchie von Gruppen zugeordnet .
Der Beobachter erhält (Kalender-) Daten von den Gruppen, denen er in den verschiedenen Hierarchien zugeordnet ist. Diese Daten werden berechnet, indem Daten aus übergeordneten Gruppen der Gruppe kombiniert werden, die versuchen, Daten zu sammeln (jede Gruppe kann nur einen übergeordneten Benutzer haben ).
Der Betreff kann die Daten (die die Beobachter erhalten) in den Gruppen erstellen, denen er zugeordnet ist. Wenn Daten in einer Gruppe erstellt werden, verfügen auch alle "Kinder" der Gruppe über die Daten, und sie können eine eigene Version eines bestimmten Datenbereichs erstellen , die jedoch weiterhin mit den ursprünglich erstellten Daten verknüpft ist (in In meiner spezifischen Implementierung enthalten die Originaldaten Zeiträume und Überschriften, während die Untergruppen den Rest der Daten für die Empfänger angeben, die direkt mit ihren jeweiligen Gruppen verknüpft sind.
Wenn das Subjekt Daten erstellt, muss es jedoch prüfen, ob alle betroffenen Beobachter Daten haben, die im Widerspruch dazu stehen, was meines Wissens nach eine riesige rekursive Funktion bedeutet.
Ich denke, das lässt sich so zusammenfassen , dass ich in der Lage sein muss, eine Hierarchie zu haben , in der man auf und ab gehen kann , und dass einige Orte sie als Ganzes behandeln können (Rekursion, im Grunde genommen).
Außerdem strebe ich nicht nur eine Lösung an, die funktioniert. Ich hoffe, eine Lösung zu finden, die relativ einfach zu verstehen ist (zumindest in Bezug auf die Architektur) und auch flexibel genug, um in Zukunft problemlos zusätzliche Funktionen zu erhalten.
Gibt es ein Entwurfsmuster oder eine bewährte Methode, um dieses Problem oder ähnliche Hierarchieprobleme zu lösen?
EDIT :
Hier ist das Design, das ich habe:
Die "Phoenix" -Klasse heißt so, weil mir noch kein passender Name eingefallen ist.
Aber außerdem muss ich in der Lage sein, bestimmte Aktivitäten für bestimmte Beobachter zu verbergen , obwohl sie über die Gruppen mit ihnen verbunden sind.
Ein wenig Off-Topic :
Ich persönlich bin der Meinung, dass ich dieses Problem auf kleinere Probleme reduzieren sollte, aber es entgeht mir, wie. Ich denke, das liegt daran, dass mehrere rekursive Funktionen, die nicht miteinander verknüpft sind, und verschiedene Client-Typen beteiligt sind, die Informationen auf unterschiedliche Weise abrufen müssen. Ich kann meinen Kopf nicht wirklich darum wickeln. Wenn jemand mich in eine Richtung leiten kann, wie ich Hierarchieprobleme besser einkapseln kann, würde ich mich sehr darüber freuen.
O(n)
Algorithmen für eine genau definierte Datenstruktur suchen, kann ich daran arbeiten. Ich sehe, dass Sie keine Mutationsmethoden Group
und die Struktur der Hierarchien eingeführt haben. Soll ich davon ausgehen, dass diese statisch sein werden?
n
mit einem Grad von 0 gibt, während jeder andere Scheitelpunkt einen Grad von mindestens 1 hat? Ist jeder Vertex mit verbundenn
? Ist der Weg zun
einzigartig? Wenn Sie die Eigenschaften der Datenstruktur auflisten und ihre Operationen auf eine Schnittstelle - eine Liste von Methoden - abstrahieren könnten, könnten wir (I) in der Lage sein, eine Implementierung dieser Datenstruktur zu finden.