Ho due tipi di client, un tipo " Observer " e un tipo " Oggetto ". Sono entrambi associati a una gerarchia di gruppi .
L'Osservatore riceverà (calendario) i dati dai gruppi a cui è associato attraverso le diverse gerarchie. Questi dati vengono calcolati combinando i dati dei gruppi "parent" del gruppo che tentano di raccogliere dati (ogni gruppo può avere un solo parent ).
Il Soggetto sarà in grado di creare i dati (che gli Osservatori riceveranno) nei gruppi a cui sono associati. Quando i dati vengono creati in un gruppo, anche tutti i "figli" del gruppo avranno i dati e saranno in grado di creare la propria versione di un'area specifica dei dati , ma comunque collegata ai dati originali creati (in la mia specifica implementazione, i dati originali conterranno periodi di tempo e titolo, mentre i sottogruppi specificano il resto dei dati per i destinatari direttamente collegati ai rispettivi gruppi).
Tuttavia, quando il Soggetto crea dati, deve verificare se tutti gli Osservatori interessati hanno dati in conflitto con questo, il che significa un'enorme funzione ricorsiva, per quanto posso capire.
Quindi penso che questo possa essere riassunto al fatto che ho bisogno di essere in grado di avere una gerarchia in cui puoi andare su e giù , e alcuni posti sono in grado di trattarli nel loro insieme (ricorsione, in sostanza).
Inoltre, non sto solo mirando a una soluzione che funzioni. Spero di trovare una soluzione che sia relativamente facile da capire (almeno per quanto riguarda l'architettura) e anche abbastanza flessibile da poter ricevere facilmente funzionalità aggiuntive in futuro.
Esiste un modello di progettazione o una buona pratica da seguire per risolvere questo problema o problemi di gerarchia simili?
MODIFICA :
Ecco il design che ho:
La classe "Phoenix" è chiamata così perché non pensavo ancora a un nome appropriato.
Ma oltre a ciò, devo essere in grado di nascondere attività specifiche per osservatori specifici , anche se sono collegati ad essi attraverso i gruppi.
Un po 'fuori tema :
Personalmente, sento che dovrei essere in grado di ridurre questo problema a problemi più piccoli, ma mi sfugge come. Penso che sia perché comporta molteplici funzionalità ricorsive che non sono associate tra loro e diversi tipi di client che devono ottenere informazioni in modi diversi. Non posso davvero avvolgerci la testa. Se qualcuno può guidarmi in una direzione su come migliorare l'incapsulamento dei problemi della gerarchia, sarei molto felice di ricevere anche quello.
O(n)
algoritmi efficienti per una struttura di dati ben definita, posso lavorarci su. Vedo che non hai messo in atto alcun metodo mutante Group
e la struttura delle gerarchie. Devo presumere che questi saranno statici?
n
con un in-gradi di 0 mentre ogni altro vertice ha un in-gradi di almeno 1? Ogni vertice è collegaton
? Il percorso èn
unico? Se potessi elencare le proprietà della struttura dei dati e astrarre le sue operazioni su un'interfaccia - un elenco di metodi - noi (I) potremmo essere in grado di elaborare un'implementazione di detta struttura di dati.