Eccoci con la seconda parte del nostro Learning Friday dedicato a Spring, il re dei framework! Se non l’avete letto, qui la prima parte dell’articolo.
Vi abbiamo lasciato con una breve panoramica, ora proseguiremo parlando della vera rivoluzione che si ha con Spring.
Spring framework parte 2, iniziamo!
Moduli core: INVERSION OF CONTROL (IOC)
Ossia l’inversione del flusso di controllo e dell’albero delle dipendenze.
Siamo arrivati al punto focale: l’inversion of control è un principio basato sul concetto di invertire il normale controllo del flusso di lavoro rispetto alla programmazione tradizionale. Un oggetto interagisce con il suo contesto e Spring capendo l’oggetto ci mette tutto un insieme di informazioni.
Questo vuol dire poter programmare senza dover partire sempre “da zero”. Infatti, mentre nella programmazione tradizionale lo sviluppatore stabilisce la logica del work flow, stabilendo le operazioni di creazione degli oggetti e il metodo da utilizzare, nell’inversion of control questo flusso cambia. E’ il framework ad occuparsi di questi aspetti, in modo autonomo, non più lo sviluppatore.
Gli oggetti, quando richiesti per le necessità dello sviluppo, vengono cablati gli uni agli altri direttamente da Spring. In questo modo viene risolto il problema del cablaggio statico.
Così facendo il contesto viene costruito dal container di Spring (e non da noi), che cerca un bean pronto per rispecchiare la nostra richiesta. Ciò permette di avere la stessa cosa con una sola stringa di codice anziché n stringhe. Inserisce “l’oggettone” all’interno dell’attributo che noi annotiamo come auto-wired. Fenomenale vero?!
In sintesi:
- Senza loC: si vede che c’è più codice, vediamo un numero superiore di stringhe.
- Con loC: stessa identica cosa ma con una sola stringa di codice.
L’inversion of control è quindi molto utile per:
- Separare i componenti dell’architettura;
- Astrarre i comportamenti specifici del caso d’uso dalla logica applicativa, la query che stavamo andando a fare con la logica operativa;
- Rendere il codice più leggibile e facile da estendere;
- Sostituire interamente i componenti in maniera semplice.
AOP – Aspect Oriented Programming
Questo paradigma di programmazione è basato sulla creazione di aspetti, entità software, che controllano le interazioni tra oggetti finalizzate ad eseguire un compito comune.
L’AOP:
- È utile per implementare degli aspetti universali dell’applicazione: questa classe logga, Spring lo sa e dà la variabile log;
- Disaccoppia il “come” dal “cosa” e dal “quando”: a me non interessa cosa fa lui senza il mio oggetto, a me interessa che il log ci sia;
- Normalmente è utilizzato per implementare security, logging, caching, transazioni;
- Il codice è più pulito, semplice da leggere e da estendere. L’obiettivo di Rod Johnson è sempre stato implementare i moduli per far sì che i codici siano semplici da scrivere e da leggere.
DATA ACCESS
Spring Data definisce un set di interfacce e metodi (API) indipendente dalla sorgente dati utilizzata. Esso fornisce l’implementazione di queste interfacce per molte delle più diffuse tecnologie di persistenza dei dati. Semplifica così la possibilità di dialogo tra l’applicazione e la sorgente dati, evitando ridondanze e replicazioni di codice.
Permette di avere a disposizione una marea di librerie driver.
È integrato perfettamente con JPA e con lo standard de facto Hibernate.
L’aspetto di cui ci si dimentica più facilmente è di come spring sappia incapsulare le eccezioni specifiche dei driver in eccezioni generiche rendendoci di fatto agnostici dallo stesso.
SPRING CLOUD
Spring Cloud è un progetto che fornisce degli strumenti per affrontare alcune problematiche comuni nello sviluppo delle applicazioni distribuite, in particolare a microservizi, sulla base di un insieme di pattern. Detto in altro modo: fornisce delle librerie per applicare alcuni pattern comuni utili nello sviluppo di applicazioni distribuite e a microservizi.
Sequenze sterminate e infinite di librerie. Con pochissimo vengono fuori infrastrutture enormi.
Grazie ad aziende come Pivotal e Netflix abbiamo un ecosistema cloud-first sui generis: Pivotal è la società che attualmente porta avanti il progetto Spring e Netlfix ha sviluppato la sua intera infrastruttura su Java e Spring. E proprio da Netflix abbiamo la garanzia che queste librerie funzionano!
Spring Cloud:
- è integrato perfettamente con i principali servizi IaaS come OpenShift, AWS, GCP e AKS, cioè tutte quelle aziende che forniscono infrastruttura;
- è un’infrastruttura consolidata da progetti complessi in ambito multimediale come Netflix e Spotify;
- tutto, come già detto sin dall’inizio, è rilasciato in open source, poiché Spring è un framework open source;
- è perfetto per progetti ad infrastruttura complessa.
E quindi? Perché utilizzare Spring?
In conclusione, questo framework object oriented permette di sviluppare applicazioni in tempi molto più brevi rispetto alle tempistiche richieste dagli altri sistemi di programmazione: qualunque sia il supporto di cui abbiamo bisogno al 99.9% esiste uno Spring Project per aiutarci a costruirlo.
Consulta la prima parte dell’articolo!