Architektura heksagonalna – zwana wzorcem portów i adapterów

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.

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.