-
Notifications
You must be signed in to change notification settings - Fork 0
Architettura
Abbiamo deciso di strutturare il progetto con l'impiego di diverse tecnologie. Una parte fondamentale è sicuramente il framework FoalTS, attraverso cui siamo stati in grado di costruire una gerarchia ben definita all'interno del nostro progetto. Dal punto di vista dell'organizzazione delle directory abbiamo deciso di implementare una netta separazione tra il modello dell'entità da rappresentare, il servizio che interagisce con il modello ed infine controller per fornire le API tramite protocollo HTTP.
- config Contiene un file json per ciascuna configurazione dell'app (produzione, test etc). Questo file specifica alcune impostazioni per FoalTS come la porta esposta dal server e l'indirizzo del database.
-
frontend
Contiene il codice typescript che consiste nel sorgente per la generazione del javascript usato dal frontend dell'applicazione. - public Contiene l'html e il javascript per il frontend. Il javascript è il risultato della transpilazione del typescript contenuto in /frontend
-
src
Contiene il sorgente per tutta la logica del backend.
-
app
La cartella principale dell'applicazione che esegue a lato server. È divisa in varie sottocartelle, ciascuna contenente dei files con un focus ben preciso (in accordo con la filosofia di FoalTS).
- controllers Qui specifichiamo i controllers. Un controller gestisce uno o più endpoints, valida le richieste in entrata, esegue le opportune azioni -invocando il servizio appropriato (o i servizi)- e risponde al client in accordo con l'effetto che le azioni hanno avuto sullo stato del server. Un controller non include al suo interno la logica per eseguire l'azione, ma demanda tale compito ai rispettivi servizi.
- hooks Qui definiamo eventuali hooks da applicare prima dell'esecuzione di una funzione di uno specifico controller. Un hook rappresenta una funzione a cui vengono passati gli stessi parametri del controller, l'hook a questo punto ha il compito di decidere, tramite la sua implemetazione, se inoltrare la richiesta al controller oppure ritornare un errore specifico al frontend. Foal permette, tramite le funzionalità di Typescript, di applicare gli hook tramite dei semplici decorator.
- models Qui definiamo quale sarà la rappresentazione interna al nostro servizio dei dati con i quali andremo a lavorare. Questa cartella rappresenta il nucleo del progetto e le altre tre dipendono dai modelli contenuti in essa.
- services Questa cartella contiene i servizi. Un servizio contiene al suo interno la logica necessaria per eseguire un'azione sul server (creare un utente, leggere un utente dal database, creare un piano etc.)
- e2e Contiene il codice usato per i test end-to-end (di integrazione)
- scripts Contiene degli script per facilitare lo sviluppo e il testing
-
app
La cartella principale dell'applicazione che esegue a lato server. È divisa in varie sottocartelle, ciascuna contenente dei files con un focus ben preciso (in accordo con la filosofia di FoalTS).
Un vantaggio di questa struttura è il fatto che le cartelle sono organizzate in modo tale da favorire il principio di singola responsabilità. Questo risulta sicuramente di aiuto nel mantenere elevato il livello della qualità del codice e va anche a vantaggio della sua manutenibilità.