Ho due tipi di client, un tipo " Observer " e un tipo " Oggetto ". Sono entrambi associati a una gerarchia di gruppi .
L'Observer riceverà (calendario) dati dai gruppi a cui è associato attraverso le diverse gerarchie. Questi dati vengono calcolati da combinando i dati dei gruppi "padre" del gruppo che tenta di raccogliere dati (ciascun gruppo può avere solo un genitore ).
L'Oggetto 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, tutti i "figli" del gruppo avranno anche i dati, e saranno in grado di fare la propria versione di un'area specifica dei dati , ma comunque collegati ai dati originali creati (nella mia specifica implementazione, i dati originali conterranno periodo / i di tempo e titolo, mentre i sottogruppi specificheranno il resto dei dati per i ricevitori direttamente collegati ai rispettivi gruppi).
Tuttavia, quando l'Oggetto crea dati, deve verificare se tutti gli Observer interessati hanno dei dati che confliggono con questo, il che significa un'enorme funzione ricorsiva, per quanto posso capire.
Quindi penso che questo possa essere riassunto al fatto che devo essere in grado di avere una gerarchia su cui puoi andare su e giù , e in alcuni posti essere in grado di trattarli nel loro complesso (ricorsione, in pratica).
Inoltre, non sto solo puntando a una soluzione che funzioni. Spero di trovare una soluzione che sia relativamente facile da comprendere (almeno per quanto riguarda l'architettura) e abbastanza flessibile da poter ricevere facilmente ulteriori funzionalità 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 ho ancora pensato ad un nome appropriato.
Ma oltre a questo ho bisogno di poter nascondere attività specifiche per osservatori specifici , anche se sono collegati a loro attraverso i gruppi.
Un po 'fuori tema :
Personalmente, penso che dovrei riuscire a ridurre questo problema a problemi più piccoli, ma mi sfugge come. Penso che sia perché coinvolge più funzionalità ricorsive che non sono associate tra loro e tipi di client diversi che hanno bisogno di ottenere informazioni in modi diversi. Non riesco davvero a capirlo. Se qualcuno mi può guidare in una direzione su come migliorare l'incapsulamento dei problemi di gerarchia, sarei molto lieto di ricevere anche questo.