Considera i dati degli orari dei treni, in cui ogni servizio (o "corsa") ha una struttura dati come tale:
public class TimeTable
{
public int Id {get;set;}
public List<Run> Runs {get;set;}
}
public class Run
{
public List<Stop> Stops {get;set;}
public int RunId {get;set;}
}
public class Stop
{
public int StationId {get;set;}
public TimeSpan? StopTime {get;set;}
public bool IsStop {get;set;}
}
Abbiamo un elenco di esecuzioni che operano su una particolare linea (la classe TimeTable
).
Inoltre, mentre abbiamo una raccolta di stazioni fisse su una linea, non tutte le corse si fermano su tutte le stazioni (ovvero IsStop
sarebbe false
e StopTime
sarebbe null
).
Ora, immagina di aver ricevuto il calendario iniziale, lo abbiamo elaborato e caricato nella struttura dati sopra. Una volta completato il caricamento iniziale, viene mantenuto in un database: la struttura dei dati viene utilizzata solo per caricare l'orario dalla sua origine e per mantenerlo nel database.
Ora stiamo ricevendo un orario aggiornato.
L'orario aggiornato può o non può avere alcuna modifica - non sappiamo e non viene detto se sono presenti modifiche.
Quello che vorrei fare è eseguire un confronto per ogni corsa in modo efficiente. Non voglio semplicemente sostituire ogni corsa. Invece, voglio avere un'attività in background che viene eseguita periodicamente che scarica il dataset aggiornato dell'orario e poi la confronta con il calendario corrente. Se vengono rilevate differenze, alcune azioni (non pertinenti alla domanda) avranno luogo.
Inizialmente pensavo a una sorta di processo di checksum, in cui potevo, ad esempio, caricare entrambe le esecuzioni (ovvero, dal nuovo orario ricevuto e quello che è stato mantenuto nel database) nella struttura dati e quindi somma tutti i componenti delle ore di StopTime
e tutti i componenti dei minuti di StopTime
e confronta i risultati (cioè sia la somma di Ore che la somma dei Minuti sarebbe la stessa, e le differenze introdotte se si fermano il tempo è cambiato, un arresto cancellato o un nuovo stop aggiunto).
Sarebbe un modo valido per verificare le differenze o esiste un modo migliore per affrontare questo problema? Posso vedere un problema che, ad esempio, uno stop viene modificato per essere 2 minuti prima, e un altro modificato per essere 2 minuti più tardi avrebbe una variazione netta zero.
O sto pensando troppo a questo, e sarebbe più semplice controllare tutte le fermate per assicurarsi che
- La corsa aggiornata si ferma sulle stesse stazioni; e
- Ogni fermata è allo stesso tempo