Corso di Java Spring Framework #2 | Convention over configuration
Dopo aver introdotto Spring nel precedente articolo illustriamo il cosiddetto approccio "convention over configuration" utilizzato dal framework.
Agli albori di Spring realizzare un'applicazione non era molto semplice nel senso che bisognava in qualche modo impostare il progetto da zero e quindi, non soltanto specificare tutte le dipendenze necessarie, ma anche garantire la compatibilità di tutte le versioni per evitare potenziali conflitti.
Inoltre erano richieste delle opportune configurazioni che originariamente erano basate solo su file XML di cui andava rispettata la sintassi e che richiedeva un certo sforzo per lo sviluppatore. Fortunatamente dalla versione 2.5 in poi sono state introdotte le annotazioni Java che oggi sono utilizzate di regola. Probabilmente si incontrano i file XML soltanto in applicazioni legacy.
Di sicuro le annotazioni sono molto più semplici da utilizzare visto che sono introdotte direttamente nel codice sorgente e non richiedono la creazione di ulteriori file.
Ritorniamo all'argomento principale dell'articolo ovvero l'approccio "convention over configuration" presente in Spring e ulteriormente sviluppato con l'introduzione di Spring Boot.
L'idea di fondo è che ciascuna applicazione necessita di una configurazione specifica per il proprio dominio (ad esempio un gestionale è diverso da una applicazione di e-commerce) ma sono presenti delle logiche comuni un po' a tutti gli ambiti.
Pensiamo ad esempio alla sicurezza e alle relative procedure di registrazione e autenticazione degli utenti.
Quindi anziché configurare l'applicazione a puntino, cosa ampiamente auspicabile ma che richiede del tempo, si impostano delle configurazioni di default (approccio convenzionale) che consentono di essere operativi in pochissimo tempo adottando le linee guida fornite dal team di sviluppo.
L'applicazione non sarà perfettamente aderente alle nostre esigenze ma funzionante in pochissimo tempo.
Naturalmente siamo liberi di apportare tutte le modifiche necessarie in un secondo momento, in un processo di raffinamento per passi successivi.
Anche la creazione di un nuovo progetto richiede poco tempo sfruttando tool online come Spring Initializr o plugin come STS per Eclipse.
In questo caso basta fornire alcune informazioni di base del progetto, scegliere il gestore da utilizzare (Maven o Gradle), elencare le dipendenze richieste.
L'applicazione così ottenuta sarà in grado di compilare ed essere eseguita senza nessun intervento specifico dello sviluppatore proprio sfruttando appunto le impostazioni "convenzionali" definite dal team di Spring.
In particolar modo i cosiddetti starter, ovvero dei contenitori di dipendenze, ci liberano da tutte le problematiche connesse alla scelta delle versioni delle librerie.
In sostanza abbiamo delle dipendenze di "alto livello" rappresentate da opportuni moduli o micro framework e ci basta includere solo quelle all'interno del descrittore del nostro progetto (ad esempio il file pom.xml in Maven) o ancora più semplicemente sceglierle da un comodo menu in Spring Initializr o STS.
Così se dobbiamo gestire la sicurezza aggiungeremo lo starter relativo e lo stesso dicasi per la gestione della persistenza dei dati, la creazione di applicazioni web.
Ciascuno starter saprà quali ulteriori dipendenze utilizzare e come fare in modo che non siano in conflitto tra di loro.
Ovviamente ci saranno delle annotazioni specifiche per ciascun modulo che andranno utilizzate di volta in volta.
L'approccio "convention over configuration" ci rende molto più produttivi perchè non dobbiamo partire da zero e configurare l'intera applicazione in maniera perfetta prima di poter fare la prima build.