Come aggiornare un modello con dipendenze

1

Sto avendo un po 'di difficoltà a capirlo. Ho un modello (che puoi vedere nell'immagine qui sotto) questo modello può essere cambiato (non succederà spesso, ma può). Quando cambia non ottengo i cambiamenti ottengo l'INTERO set di dati, ottengo questo set nel seguente ordine (non so se è rilevante): prima ottengo tutte le etichette, poi ottengo tutte le stazioni, poi il filtri, quindi i tipi e infine i messaggi.

L'aggiornamento delle proprietà di queste classi non è un problema, mi sto bloccando quando ho bisogno di aggiornare la gerarchia, dal momento che sono tutte connesse l'una con l'altra.

Ho creato una rete eccessivamente complicata di metodi di aggiornamento per tutti i modelli in cui avrebbero notificato a coloro che hanno un record su di loro che sono stati rimossi, ma più ho ottenuto con questo più mi sono perso nel codice che ero la scrittura. Così ho deciso di fare un passo indietro e pensare a un modo più semplice. Sfortunatamente non conosco un modo facile da leggere per aggiornare questo modello.

Il difficile ruolo è con i messaggi e le procedure attive. Se un'etichetta (trigger del messaggio e abilitata del filtro) è diventata attiva, il messaggio deve diventare ActiveMessage. Questo messaggio attivo deve essere gestito secondo una procedura. quando il messaggio diventa attivo, creo una procedura stateful che tiene traccia di quali passaggi sono stati completati.

Quando ho aggiornato il modello ho bisogno di tenere a mente che non posso cancellare vecchi messaggi attivi che devono ancora essere gestiti e ho bisogno di controllare se a causa delle modifiche sono stati attivati nuovi messaggi. Un messaggio può anche essere disattivato se l'etichetta abilitata del filtro è diventata inattiva o l'etichetta di ripristino dei messaggi è diventata attiva. Quindi con tutte queste dipendenze sono in perdita.

Qualcuno può aiutarmi a trovare un modo corretto per aggiornarlo?

Il modello:

    
posta Vincent 18.11.2016 - 09:30
fonte

2 risposte

1

Osservazioni:

  • Il tuo modello ha proprietà di navigazione (ad esempio Label - > Message, StationFilter < - > Station); cercare di eliminare un lato della relazione per ridurre il sovraccarico mentale e la necessità di entità temporaneamente incoerenti; questo rende la risposta a "quale entità possiede la relazione" viene naturalmente.
  • Decidi se vuoi che i tuoi oggetti cambino il loro stato (OOP) o se usi uno script di transazione per orchestrare le modifiche ad essi da qualche classe "controller" o "command".
  • Qualunque sia la tua scelta, assicurati sempre che i tuoi oggetti invarianti siano validi. Ogni caso d'uso che stai descrivendo dovrebbe essere modellato come una singola esecuzione su un grafico di un oggetto che sia coerente prima dell'inizio dell'esecuzione e dopo l'inizio dell'esecuzione.
  • Il runtime - transazionale / RDBMS / approvvigionamento di eventi / questioni relative al sistema distribuito - ad es. Non vedo alcuna proprietà Id ; significa che tutti ce l'hanno o nessuno di loro ce l'ha? Cerca di rendere il maggior numero possibile di oggetti valore senza ID referenziati al di fuori del grafico, mentre se questo è un modello a oggetti mappato alla tabella, mantenendo le chiavi surrogate in ogni entità gestita da un altro.
risposta data 18.02.2018 - 12:29
fonte
0
  1. Modifica il modello in modo che sia facile da aggiornare: rimuovi i controlli e le restrizioni invariabili durante l'aggiornamento del modello.
  2. Se un elemento del modello deve cambiare il tipo di classe durante l'aggiornamento, eliminare tale modifica: utilizzare una singola classe e, se è necessario differenziare il comportamento o l'archiviazione dei dati nelle istanze, utilizzare oggetti figlio che possono essere sostituiti senza modificare i riferimenti al oggetto genitore.
  3. Spostare i controlli invarianti in un metodo di verifica invariante ricorsivo, dall'alto in basso. Questo metodo potrebbe dover apportare correzioni, ma tu controlli completamente l'ordine delle operazioni.
  4. Prima aggiorna il modello, quindi esegui i controlli invarianti.
risposta data 24.11.2016 - 00:03
fonte