Architektura heksagonalna (ang. hexagonal architecture) – co to jest?

by Tomek Poniatowicz

Hexagonal architecture, czyli architektura heksagonalna, to wzorzec projektowy, który zyskuje coraz większą popularność w świecie programowania. Jej celem jest stworzenie aplikacji o luźno powiązanych komponentach, które można łatwo wymieniać i testować niezależnie od zewnętrznych zależności. W tym artykule wyjaśnimy, czym dokładnie jest hexagonal architecture, jakie są jej kluczowe elementy oraz dlaczego warto ją stosować. Na koniec przedstawimy praktyczne przykłady, które pomogą lepiej zrozumieć, jak wdrożyć ten wzorzec w codziennej pracy.

Czym jest hexagonal architecture?

Hexagonal architecture, znana także jako architektura portów i adapterów (ports & adapters), została zaproponowana przez Alistaira Cockburna w 2005 roku. Jej głównym założeniem jest oddzielenie logiki biznesowej (domeny) od wszelkich zależności zewnętrznych, takich jak bazy danych, interfejsy użytkownika czy zewnętrzne API. Dzięki temu aplikacja staje się bardziej modularna, łatwiejsza w utrzymaniu i testowaniu.

W przeciwieństwie do tradycyjnej architektury warstwowej, gdzie zależności biegną od warstw wyższych do niższych, w hexagonal architecture zależności kierowane są od zewnętrznych komponentów do wnętrza aplikacji, czyli do domeny. To domena definiuje porty – interfejsy komunikacji, a adaptery są ich implementacjami po stronie zewnętrznej.

Kluczowe elementy hexagonal architecture

  1. Domena (Core) To serce aplikacji, gdzie znajduje się logika biznesowa i przypadki użycia. Domena nie zna szczegółów implementacji zewnętrznych systemów i nie zależy od nich.
  2. Porty Są to interfejsy definiujące, jak aplikacja komunikuje się ze światem zewnętrznym. Porty mogą być wejściowe (np. przyjmujące żądania od użytkownika) lub wyjściowe (np. wysyłające dane do bazy).
  3. Adaptery Implementują porty i odpowiadają za komunikację z konkretnymi technologiami, takimi jak bazy danych, interfejsy użytkownika, API czy systemy zewnętrzne. Adaptery można łatwo wymieniać bez wpływu na logikę biznesową.

Zalety stosowania hexagonal architecture

  • Modularność i wymienialność komponentów Dzięki wyraźnemu podziałowi na porty i adaptery można łatwo podmieniać technologie, np. zmienić bazę danych lub interfejs użytkownika bez ingerencji w logikę biznesową.
  • Łatwość testowania Logika biznesowa jest całkowicie odseparowana, co umożliwia testowanie jej w izolacji, bez konieczności uruchamiania zewnętrznych systemów.
  • Niezależność od frameworków i technologii Kod domeny nie zależy od konkretnych bibliotek czy frameworków, co zwiększa jego stabilność i ułatwia rozwój.
  • Wsparcie dla Domain-Driven Design (DDD) Hexagonal architecture dobrze współgra z podejściem DDD, ponieważ skupia się na domenie i jej przypadkach użycia.

Praktyczne przykłady zastosowania hexagonal architecture

Aby lepiej zrozumieć, jak działa hexagonal architecture, warto przyjrzeć się kilku praktycznym przykładom z różnych obszarów.

Aplikacja e-commerce

Wyobraźmy sobie aplikację do sprzedaży online. W centrum (domenie) mamy logikę zarządzania zamówieniami, produktami i płatnościami. Porty definiują, jak aplikacja komunikuje się z zewnętrznym światem:

  • Port wejściowy – API REST przyjmujące zamówienia od klientów.
  • Port wyjściowy – interfejs do systemu płatności, który realizuje transakcje.

Adaptery implementują te porty:

  • Adapter REST obsługuje żądania HTTP i przekazuje je do domeny.
  • Adapter płatności integruje się z zewnętrznym serwisem, np. PayU lub Stripe.

Dzięki takiemu podejściu, jeśli za rok zdecydujemy się zmienić system płatności, wystarczy wymienić adapter płatności bez konieczności modyfikowania logiki biznesowej.

System zarządzania treścią (CMS)

W systemie CMS domena odpowiada za zarządzanie artykułami, użytkownikami i uprawnieniami. Porty mogą obejmować:

  • Port wejściowy – interfejs użytkownika (np. panel administracyjny) lub API do publikowania treści.
  • Port wyjściowy – dostęp do bazy danych lub systemu plików do przechowywania obrazów.

Adaptery to konkretne implementacje:

  • Webowy frontend jako adapter wejściowy.
  • Adapter bazy danych, np. do PostgreSQL lub MongoDB.
  • Adapter do chmury, jeśli przechowujemy pliki na Amazon S3.

Dzięki hexagonal architecture możemy łatwo wymieniać bazę danych lub dodawać nowe kanały publikacji bez wpływu na domenę.

Jak zacząć wdrażać hexagonal architecture?

  1. Zdefiniuj domenę i jej granice Skup się na logice biznesowej i przypadkach użycia, które są sercem Twojej aplikacji.
  2. Określ porty Zdefiniuj interfejsy komunikacji z zewnętrznym światem – zarówno wejściowe, jak i wyjściowe.
  3. Stwórz adaptery Implementuj porty dla konkretnych technologii, takich jak bazy danych, API, interfejs użytkownika.
  4. Testuj domenę niezależnie Dzięki izolacji logiki biznesowej możesz pisać testy jednostkowe bez konieczności uruchamiania zewnętrznych komponentów.

Podsumowanie

Hexagonal architecture to wzorzec, który pomaga tworzyć elastyczne, testowalne i łatwe w utrzymaniu aplikacje. Dzięki wyraźnemu rozdzieleniu domeny od zewnętrznych zależności, aplikacje oparte na hexagonal architecture są bardziej odporne na zmiany technologiczne i łatwiejsze w rozwoju.

Praktyczne przykłady pokazują, jak ten wzorzec może być stosowany w różnych typach aplikacji – od e-commerce, przez CMS, aż po aplikacje mobilne. Jeśli chcesz, aby Twoje projekty były bardziej modularne i łatwiejsze w utrzymaniu, warto rozważyć wdrożenie hexagonal architecture.

Masz pytania dotyczące implementacji hexagonal architecture lub chcesz poznać narzędzia, które ułatwią Ci pracę z tym wzorcem? Napisz do nas.

Looking for a technology partner?

Let's talk about your project

Take the first steps in your digital transformation for better