
(articolo redatto da Maurizio Migliore)
L’architettura enterprise ha subito un’evoluzione nel corso degli anni, passando da architetture centralizzate a distribuite.
In questo contesto evolutivo, diventa centrale saperne di più sull’architettura esagonale, che è l’argomento di questo approfondimento.
Evoluzione delle architetture per le Applicazioni Enterprise
Inizialmente basate su mainframe, le architetture Enterprise si sono poi spostate verso modelli client-server, in cui il client gestiva la visualizzazione e il server gestiva le logiche di business e i dati.
Con l’avvento di Internet, si è adottato un approccio a tre livelli (3-tier), in cui il client era rappresentato da programmi come i browser e il server era suddiviso in presentation, business e data layer.
Successivamente, sono state introdotte modalità di intercomunicazione come l’Enterprise Application Integration (EAI), la Service-Oriented Architecture (SOA) e il Cloud Computing.
L’EAI permetteva la comunicazione tra sistemi eterogenei tramite un hub di comunicazione.
La SOA introdusse componenti come l’Enterprise Service Bus (ESB) e i Web Services, basati sul concetto di servizio.
Il Cloud Computing portò all’astrazione dell’infrastruttura e alla vendita di software, piattaforme e infrastrutture come servizio.
Queste evoluzioni hanno comportato una frammentazione delle competenze e una complessità crescente.
Perchè l’Architettura Esagonale
Nel 2005 Alistair Cockburn, uno dei firmatari del Manifesto per lo Sviluppo Agile del Software, ha proposto Hexagonal Architecture o Port and Adapter Architecture proprio per gestire la complessità di cui sopra.
L’Architettura Esagonale centralizza l’attenzione sull’applicazione e decentralizza i sistemi esterni tramite l’uso di ports e adapters per la comunicazione con i diversi sistemi.
La scelta del nome “esagonale” è principalmente metaforica e mira a trasmettere l’idea di un nucleo centrale che interagisce con i suoi sistemi esterni, creando un disaccoppiamento e una modularità all’interno dell’architettura. Nonostante il nome, non vi è una restrizione sul numero effettivo di sistemi esterni che possono interagire con il core.

L’architettura esagonale, anche nota come architettura Port and Adapter, è stata sviluppata con l’intento di creare un’applicazione che sia separata in modo netto e che eviti qualsiasi tipo di interdipendenza tra i suoi componenti.
L’idea principale è quella di organizzare i vari livelli in modo concentrico, anziché come una pila, con il nucleo dell’applicazione al centro.
Questo nucleo rappresenta gli oggetti di dominio che contengono la logica e le regole di business dell’applicazione. All’interno del nucleo, non ci sono riferimenti diretti a dettagli tecnologici, che invece sono gestiti all’esterno.
Attorno al nucleo, sono presenti delle “porte”, che fungono da confine tra gli oggetti di dominio e il mondo esterno. Queste porte sono astratte rappresentazioni di servizi e consentono di isolare il nucleo del dominio dalle implementazioni specifiche dei servizi esterni.
Esistono due tipi di porte:
- le porte in ingresso (inbound port), che consentono al nucleo di essere invocato da componenti esterni attraverso un’interfaccia definita,
- le porte in uscita (outbound port), che consentono al nucleo di accedere a funzionalità esterne, come ad esempio l’interazione con un database.
Infine, nel livello più esterno dell’applicazione si trovano gli “adapters“, che sono responsabili dell’implementazione delle porte.
Gli adapters possono essere di due tipi:
- gli “adapters primari” (primary adapters o input adapters), se si occupano di implementare un’inbound port,
- i “secondary adapters” o “output adapters” se gestiscono un’outbound port.
Questi adapters consentono alla logica del nucleo di comunicare in modo efficace con il mondo esterno, garantendo al contempo la separazione tra il nucleo dell’applicazione e gli aspetti tecnologici specifici.
I vantaggi dell’architettura esagonale
L’architettura esagonale, presenta diversi vantaggi che contribuiscono a migliorare la qualità e la gestione delle applicazioni enterprise. Ecco i principali:
- Separazione delle responsabilità – L’architettura esagonale promuove una chiara separazione delle responsabilità all’interno dell’applicazione. Le porte gestiscono l’interfacciamento con i sistemi esterni, mentre gli adapters si occupano della traduzione dei messaggi. Ciò consente di mantenere un’architettura modulare e favorisce il riuso del codice.
- Testabilità migliorata – Grazie alla separazione delle responsabilità, l’architettura esagonale semplifica notevolmente l’esecuzione di test automatizzati. L’applicazione può essere testata in modo isolato dagli eventuali sistemi esterni, consentendo una maggiore copertura dei test e facilitando l’adozione di pratiche come il Test-Driven Development (TDD) e il Continuous Integration/Continuous Delivery (CI/CD).
- Adattabilità e scalabilità – L’architettura esagonale favorisce l’adattabilità dell’applicazione alle esigenze di cambiamento. Essendo indipendente dai sistemi esterni, l’applicazione può essere facilmente modificata o estesa, senza influire sulla logica di business centrale. Ciò consente di adattarsi rapidamente alle nuove funzionalità richieste o di integrarsi con nuovi sistemi esterni.
- Riduzione della dipendenza da framework e tecnologie specifiche – L’architettura esagonale riduce la dipendenza da framework o tecnologie specifiche, consentendo una maggiore flessibilità e facilitando l’adozione di nuove tecnologie. Gli adapters si occupano di gestire le specifiche implementazioni dei sistemi esterni, permettendo all’applicazione di rimanere focalizzata sulle proprie logiche di business, senza essere vincolata a particolari tecnologie.
- Miglior gestione degli errori e tolleranza ai guasti – Grazie alla chiara separazione delle responsabilità, l’architettura esagonale consente di gestire in modo più efficace gli errori e la tolleranza ai guasti. È possibile implementare meccanismi di gestione degli errori specifici per ogni port e adapter, consentendo un’adeguata gestione delle eccezioni e la possibilità di definire strategie di fallback o di ripristino.
Conclusioni
In sintesi, l’architettura esagonale offre vantaggi significativi in termini di modularità, testabilità, adattabilità e gestione degli errori. Essa promuove una separazione chiara delle responsabilità e favorisce l’adozione di best practice di sviluppo, quali il testing automatizzato e l’integrazione continua. Infine essa è particolarmente adatta per le applicazioni enterprise complesse, in cui è necessario gestire l’interazione con numerosi sistemi esterni.
Se anche tu vuoi occuparti di progetti di Sviluppo Applicazioni Enterprise
dai un’occhiata alle nostre opportunità di lavoro e conosciamoci subito!