Sei sulla pagina 1di 12

Ports &

Adapters
Architecture
(aka Hexagonal Architecture)
Introduzione
L’architettura Ports & Adapters fu
introdotta per la prima volta da Alistair
Cockburn nel 2005.

“Allow an application to equally be driven


by users, programs, automated test or
batch scripts, and to be developed and
tested in isolation from its eventual
run-time devices and databases.”
Problema
Uno dei problemi frequenti dello sviluppo software degli
ultimi anni, è legato alla penetrazione di logiche di business
nel codice di user interface.

L’obiettivo dell’architettura proposta è quello di separare in


maniera netta la logica di business dell’applicazione
dall’interfaccia grafica, database o qualsiasi altro
componente esterno.
Idea alla base della
soluzione
L’idea di base dell’architettura Ports and Adapters è che
l’applicazione è la parte centrale del nostro sistema. Tutti gli input e
gli output comunicano con il core dell’applicazione tramite delle
interfacce chiamate porte, che isolano l’applicazione da
tecnologie e strumenti esterni al nostro dominio.

Il core dell’applicazione non deve essere a conoscenza di chi invia


e riceve gli input e output nel nostro sistema.
Concetti chiave
● Core
○ Domain Object
○ Use Case
● Ports
○ Primary/Input Ports
○ Secondary/Output Ports
● Adapters
○ Primary/Driving Adapters
○ Secondary/Driven Adapters
Core
Il core dell’applicazione è il luogo del nostro sistema
dove risiede tutta la logica di business.

È formato da due componenti principali: i domain


objects e gli use cases.
I domain objects sono la parte centrale
dell’applicazione e tramite questi oggetti andiamo a
modellare il nostro dominio applicativo.

I domain objects non hanno alcuna dipendenza verso


altri componenti del nostro sistema: se un requisito di
business cambia è sufficiente modificare l’oggetto
per riflettere i nuovi requisiti.
Domain Object - Esempio
Core - Use Cases
Gli use cases sono un astrazione per rappresentare
cosa un utente può fare nell’applicazione.

Anche gli use cases fanno parte del core


dell’applicazione e non hanno dipendenze verso
componenti esterni.
Porte
Il core dell’applicazione utilizza delle interfacce
dedicate, chiamate porte, per comunicare verso
l’esterno.

Le porte si dividono in primary ports (input ports) e


secondary ports (output ports). Le porte primarie
espongono le funzionalità del core al mondo esterno e
vengono posizionate a sinistra dell’esagono.

Le porte secondarie vengono invece usate dal core


per poter comunicare con servizi esterni (es. Per
comunicare con un database).
Porte - Esempio
Primary port - operazioni sull’account utente

Secondary port - memorizzazione su database


Adapters
Gli adapters sono, essenzialmente,
un'implementazione delle porte.

Anche gli adapters si dividono in primary adapters e


secondary adapters e sono l’implementazione delle
porte di input e output rispettivamente.

Interagiscono con il core dell’applicazione ma sono


componenti indipendenti.
Vantaggi dell’Architettura
● Netta separazione tra logica di business e
componenti esterni.
● La logica di business non dipende da
interfaccia utente, database o altre
tecnologie.
● Miglior testabilità del sistema: ogni
componente può essere testato in autonomia
e di conseguenza si riduce il bisogno di
numerosi end-to-end testing.