Architektura heksagonalna (zwana wzorcem portów i adapterów) to wzorzec projektowy stworzony przez Alistaira Cockburna. Pozwala całkowicie odizolować kluczową logikę biznesową (domenę) od zewnętrznych elementów systemu, takich jak bazy danych, interfejs użytkownika czy zewnętrzne API.

Dzięki temu aplikacja jest wysoce elastyczna i łatwa w testowaniu.
Główne elementy tego podejścia obejmują:
1. Rdzeń (Aplikacja / Domena)
- To serce całego systemu.
- Zawiera wszystkie zasady biznesowe, encje i przypadki użycia.
- Najważniejsza zasada: Rdzeń nie wie nic o świecie zewnętrznym. Nie obchodzi go, czy dane pochodzą z interfejsu www, aplikacji mobilnej, czy kontrolera API.
2. Porty (Interfejsy)
- Stanowią kontrakt i sposób komunikacji rdzenia z resztą systemu.
- Zdefiniowane są wewnątrz aplikacji i określają „co” system może zrobić.
- Dzielimy je na:
- Porty wejściowe (Driving): Używane przez świat zewnętrzny do sterowania aplikacją (np. przypadek użycia „ZarejestrujUżytkownika”).
- Porty wyjściowe (Driven): Używane przez aplikację do pobierania/zapisywania danych (np. interfejs repozytorium pobierający użytkownika z bazy).
3. Adaptery (Implementacje)
- Tłumaczą żądania ze świata zewnętrznego na język, który rozumie aplikacja.
- Implementują one odpowiednie porty.
- Dzielimy je na:
- Adaptery wejściowe: Inicjują akcję (np. kontroler REST, interfejs CLI wiersza poleceń).
- Adaptery wyjściowe: Wykonują operację zleconą przez aplikację (np. implementacja bazy danych PostgreSQL, wysyłacz wiadomości e-mail).
Dlaczego warto stosować ten wzorzec?
- Łatwe testowanie: Logikę biznesową można testować jednostkowo, bez konieczności uruchamiania bazy danych czy serwera.
- Wymienność technologii: Jeśli zajdzie potrzeba zmiany bazy danych z MySQL na MongoDB, wymieniasz tylko odpowiedni adapter, nie modyfikując logiki biznesowej.
- Niezależność od interfejsu: Ten sam rdzeń biznesowy może być obsługiwany przez aplikację webową, mobilną lub komendę w terminalu.
Większość aplikacji w systemie Linux posiada dedykowaną architekturę. Rozwiązanie architektoniczne prezentowane w tym artykule, pozwala zrozumieć, jak ciekawym procesem jest poznawanie architektur aplikacji dla Linuxa.