Supponiamo di lavorare su un'applicazione di tracciamento del progetto. L'applicazione è un database supportato, server ospitato, applicazione web. In questa applicazione ci sono Progetti che hanno molte Attività che hanno molti Attività . Un compito ha due campi data un originalDueDate e un projectedDueDate .
Inoltre, ci sono campi dinamici nelle Attività e Progetti che indicano se Attività o Progetto è in ritardo sulla pianificazione in base alle date di scadenza previste delle attività secondarie e a varie altre variabili come il tempo di buffer residuo, ecc.
Ci sono un certo numero di cose che possono far cambiare projectedDueDate . Ad esempio, un dipendente che lavora al progetto può (tramite una richiesta del server) inserire un ritardo di spedizione. In alternativa, un sito può (tramite una richiesta del server) entrare in una chiusura inaspettata.
Quando si verifica una di queste cose, non devo solo aggiornare il projectedDueDate della attività ma anche attivare il corrispondente progetto e Attività da aggiornare.
Qual è il modo migliore per farlo?
Ho pensato al pattern observer ma non conservo una singola copia di tutti questi oggetti in memoria. Quando arriva una richiesta, interrogo il Task in dal database, a quel punto non è associata alcuna Attività in memoria che sarebbe un listener. Potrei rimuovere la possibilità di eseguire query per Attività e forzare l'applicazione a eseguire query prima da Progetto , quindi da Attività (nel contesto di Progetto ), quindi per attività (nel contesto di Attività ) aggiungendo le relazioni dell'osservatore ad ogni passaggio ma non sono sicuro che sia il modo migliore.
Potrei configurare un sistema per l'ascolto di un database così quando viene inviato un evento modificato Task Ho un gestore che richiede il Attività a quel punto.
Potrei semplicemente impostare una relazione a due vie tra Attività e Attività in modo che L'attività conosce l'attività del genitore e quando l'attività aggiorna il suo stato l' Attività acquisisce lo stato padre e aggiornamenti.
In questo momento sono bloccato considerando tutte le opzioni e mi sto chiedendo se un singolo approccio (non deve essere un approccio elencato) sta saltando agli altri come l'approccio migliore.