Strategic Design
In questo capitolo si approfondiranno i domini individuati durante la Domain Analysis dal punto di vista del sistema informatico che dovrà essere realizzato, identificando i suoi bounded context e le relazioni tra di essi.
Gli scopi di questo processo sono di giustificare il sistema informatico da realizzare alla luce dei sottodomini del problema, suddividere il lavoro efficientemente nel team di sviluppo, minimizzando l’overhead dovuto alla necessità di coordinazione, e delineare le dipendenze tra le diverse aree di sviluppo identificate, facilitandone l’integrazione successivamente.
Contenuti
Bounded context
Come prima fase dello Strategic Design, sono stati identificati i bounded context del sistema da realizzare, a partire dai sottodomini individuati durante la Domain Analysis, suddividendo il sistema in moduli ad alto livello il più possibile indipendenti tra di loro.
Di seguito, si riportano i bounded context individuati, ognuno descritto da un proprio Bounded Context Canvas.
NOTA: i diagrammi sono stati realizzati tramite l’applicazione online Miro.
Authentication
L’Authentication BC (Bounded Context) è il bounded context corrispondente all’Authentication Subdomain e si occupa della gestione della registrazione e dell’autenticazione degli utenti nel sistema.
In particolare, viene utilizzato dal Frontend BC e utilizza l’Authentication Storage BC.
Authentication Storage
L’Authentication Storage BC è il bounded context corrispondente all’Authentication Storage Subdomain e si occupa della gestione della persistenza dei dati degli utenti nel sistema.
In particolare, viene utilizzato dall’Authentication BC.
Statistics
Lo Statistics BC è il bounded context corrispondente allo Statistics Subdomain e si occupa della gestione dei punteggi dei giocatori e della classifica globale del sistema.
In particolare, viene utilizzato dal Frontend BC e dal Game Manager BC e utilizza lo Statistics Storage BC.
Statistics Storage
Lo Statistics Storage BC è il bounded context corrispondente allo Statistics Storage Subdomain e si occupa della gestione della persistenza dei punteggi dei giocatori del sistema.
In particolare, viene utilizzato dallo Statistics BC.
Game Executor
Il Game Executor BC è un bounded context appartenente al Chess Game Subdomain e si occupa della gestione dell’esecuzione di una partita di scacchi nel sistema.
In particolare, viene utilizzato dal Game Manager BC e si basa sui componenti dell’engine degli scacchi legacy, realizzato per il progetto di Paradigmi di Programmazione e Sviluppo.
Game Manager
Il Game Manager BC è un bounded context appartenente al Chess Game Subdomain e si occupa della gestione della creazione, rimozione e ricerca delle partite di scacchi nel sistema, oltre che della connessione dei giocatori a tali partite.
In particolare, viene utilizzato dal Frontend BC e utilizza lo Statistics BC e il Game Executor BC.
Frontend
Il Frontend BC è un bounded context appartenente al Web Application Subdomain e si occupa della presentazione del sistema e della comunicazione tra gli utenti umani del sistema e il sistema stesso.
In particolare, viene utilizzato dagli utenti umani del sistema e utilizza l’Authentication BC, lo Statistics BC e il Game Manager BC.
Context Map
Dopo aver individuato i bounded context del sistema, sono state analizzate le relazioni e le dipendenze tra di essi, producendo una context map per rappresentarle graficamente.
Come mostrato dalla context map, per le interazioni verso bounded context appartenenti a domini core diversi dal proprio, si é deciso di proteggere il consumatore attraverso un Anti-Corruption Layer, in modo da minimizzare i danni al consumatore nel caso in cui l’interfaccia dei fornitori cambiasse. Infatti, per i domini core si prevede un’evoluzione continua e quindi un’interfaccia molto dinamica.
Tale Anti-Corruption Layer non è stato adottato invece per i bounded context appartenenti allo stesso dominio, per i quali si è deciso di risparmiare delle risorse in termini di tempo. Infatti, si è considerato che il loro sviluppo potrebbe essere assegnato allo stesso membro del team, in modo da ridurre la complessità della coordinazione tra gli eventuali collaboratori, dovuta a relazioni di tipo supplier-consumer conformiste.
Infine, nella context map è stata esplicitata anche la relazione tra il Game Executor BC e il Legacy Chess Engine, per cui il primo assume il ruolo di interfaccia verso i componenti del secondo.