L' architettura esagonale , o architettura basata su porte e adattatori , è un modello architettonico utilizzato nel campo della progettazione software . Ha lo scopo di creare sistemi basati su componenti applicativi che sono liberamente accoppiati e che possono essere facilmente collegati al loro ambiente software tramite porte e adattatori. Questi componenti sono modulari e intercambiabili, il che rafforza la coerenza dell'elaborazione e facilita l'automazione dei test.
L'architettura esagonale è stata inventata da Alistair Cockburn per evitare le solite insidie della progettazione software orientata agli oggetti che si trovano nelle architetture a strati, come le dipendenze indesiderate tra i livelli e la contaminazione del codice dell'interfaccia utente con la logica e le regole aziendali. È stato pubblicato nel 2005.
Il termine "esagonale" si riferisce a convenzioni grafiche informali, che rappresentano i componenti dell'applicazione come una cella esagonale . L'obiettivo non è suggerire che ci sarebbero sei confini/porte, ma lasciare spazio sufficiente per rappresentare i diversi tipi di interfacce necessarie tra il componente e il mondo esterno.
L'architettura esagonale suddivide un sistema in diversi componenti intercambiabili e debolmente accoppiati, come il kernel dell'applicazione, il database, l'interfaccia utente, gli script di test o persino le interfacce con altri sistemi.
Ogni componente è collegato agli altri tramite "porte" che rappresentano un canale di comunicazione. La comunicazione attraverso queste porte segue un protocollo che dipende dallo scopo dell'interazione. Le porte e i protocolli definiscono un'interfaccia di programmazione delle applicazioni (API) astratta, che può essere implementata con qualsiasi mezzo tecnico appropriato (ad esempio: invocazione di metodi in un linguaggio orientato agli oggetti , chiamate di procedure remote o persino servizi Web ).
La granularità delle porte e il loro numero non sono vincolati:
Gli adattatori formano il collante tra i componenti e con il mondo esterno. Adattano gli scambi tra il mondo esterno e il loro porto, traducendo quest'ultimo i requisiti interni alla componente applicativa. Possono essere presenti più adattatori per una singola porta, ad esempio quando i dati possono essere forniti da un utente tramite una GUI o un'interfaccia della riga di comando o inviati da un'origine dati automatizzata o da script di test.
Secondo Martin Fowler , l'architettura esagonale ha il vantaggio di utilizzare le somiglianze tra il livello di presentazione e il livello di origine dati per creare componenti simmetrici costituiti da un nucleo circondato da interfacce, ma con lo svantaggio di nascondere l'asimmetria intrinseca tra un produttore di servizi e un consumatore di servizi.
Secondo alcuni autori, l'architettura esagonale è all'origine dell'architettura basata su microservizi .
L'architettura a cipolla, proposta da Jeffrey Palermo nel 2008, è simile all'architettura esagonale. Esternalizza, infatti, anche l'infrastruttura utilizzando opportune interfacce per garantire l'assenza di accoppiamento tra l'applicazione e il database. Tuttavia, scompone il nucleo dell'applicazione in modo più preciso, sotto forma di anelli concentrici utilizzando l' inversione del controllo .
L'architettura “purée” (“ clean architecture ” in inglese), proposta da Robert C. Martin nel 2012, combina i principi dell'architettura esagonale, dell'architettura a cipolla e di diverse altre varianti architettoniche. Offre quindi ulteriori livelli di dettaglio del componente, che vengono presentati sotto forma di anelli concentrici. Questa architettura isola gli adattatori e le interfacce (interfaccia utente, database, sistemi esterni, dispositivi) negli anelli esterni dell'architettura e dedica gli anelli interni a casi d'uso ed entità L'architettura "pulita" utilizza il principio di inversione delle dipendenze con lo stretto regola che le dipendenze dovrebbero esistere solo tra un anello esterno e un anello più interno e mai il contrario.