L’applicazione si divide in 2 parti principali:
Per entrambe abbiamo deciso di applicare il pattern Model View Controller con un collegamento tra i controller delle due parti per passare dalla view per la creazione della rete a quella per la configurazione e l’avanzamento della simulazione.
Tale pattern garantisce una chiara separazione delle responsabilità all’interno del sistema, dandoci la possibilità di modificare i componenti singoli in maniera indipendente, migliorando per esempio la view in un secondo momento, a parità del model.
Quando l’utente disegna la rete ferroviaria, ogni elemento viene inviato al controller per aggiornare la griglia del model. Il model si occupa di controllare che i posizionamenti siano coerenti. Quando l’utente è pronto per avviare la simulazione, il MapBuilderController
crea il SimulationController
e scatena la creazione della nuova finestra per la simulazione.
MapBuilderView
come intuibile dal nome offre all’utente l’interfaccia grafica per il posizionamento dei componenti di dominio in una griglia, così da comporre una rete ferroviaria.
SimulationView
invece permette di impostare i parametri di simulazione ed osservare la sua esecuzione, mostrando il report finale.
MapBuilderController
si comporterà prettamente da intermediario tra la view e MapGrid mentre SimulationController
avrà anche il compito di gestire il simulation loop.
MapGrid
rappresenta il modello statico disegnato tramite la MapBuilderView
e verrà convertito in un oggetto Railway
utilizzato in Simulation
al termine della configurazione della rete ferroviaria.