Czysta architektura

przez | 4 czerwca, 2020

Czysta architektura

Czysta architektura jest bardzo podobna do innych architektur: Architektury Heksagonalnej, Architektury Portów i Adapterów, DCI (opracowanej przez Jamesa Colliena i Trygve’a Reenskaug’a) oraz BCE (opracowaną przez Ivara Jacobsena).

Powyższe architektury mają ten sam cel. Jest nim oddzielenie od siebie różnych zadań. Osiągają to w ten sam sposób: dzielą oprogramowanie na warstwy i wyróżniają: warstwę biznesową, interfejs użytkownika i interfejs systemowy. Różnią się ona między sobą tylko szczegółami. Wszystkie one mają wspólne następujące charakterystyki:

  • Niezależność od frameworków — są one szczegółami implementacyjnymi i traktowane są jak narzędzia.
  • Łatwo testowalne — logika biznesowa jest oddzielona od trudno testowalnych elementów (baza danych, interfejs użytkownika), więc łatwo jest ją testować.
  • Niezależne od ulotnych elementów — interfejs użytkownika, baza danych i inne często zmieniające się elementy są oddzielone od logiki biznesowej.
  • Niezależne od elementów zewnętrznych — logika biznesowa jest niezależna i oddzielona od interfejsów łączących aplikację z zewnętrznymi elementami.

Źródło: Czysta architektura. Struktura i design oprogramowania. Przewodnik dla profesjonalistów — Robert C. Martin. — s. 213 — Rysunek 22.1. — Czysta architektura

Czysta architektura składa się z okręgów, które tworzą następujące warstwy, zaczynając od środka (najwyższego poziomu):

  • Encje — logika biznesowa — najważniejsze reguły biznesowe (obiekty z metodami i danymi, struktury danych, funkcje).
  • Przypadki użycia — wykorzystanie encji przez aplikacje — aplikacyjne reguły biznesowe.
  • Adaptery interfejsów — połączenie przypadków użycia z interfejsami systemu i dostosowywanie danych dla obu sąsiednich warstw.
  • Frameworki i sterowniki — najbardziej ulotne elementy: interfejs użytkownika, baza danych, zewnętrzne elementy, urządzenia, sieć www, frameworki, biblioteki.
Bestseller dnia w księgarni Złote Myśli

Zasada zależności

Główną zasadą tej architektury jest zasada zależności: zależności muszą wskazywać w kierunku zasad o wyższym poziomie, czyli do wnętrza architektury (środkowy okręg ma najwyższy poziom). Granice okręgów stworzone są tak, że elementy wewnątrz danego okręgu nie wiedzą nic o tym, co jest na zewnątrz ich, np. nazwy, obiekty, dane występujące w zewnętrznych okręgach nie występują w wewnętrznych okręgach.

Wzorzec Skromny obiekt = moduł trudny do testowania + łatwy do testowania

Skromny obiekt jest wzorcem ułatwiającym wykonywanie testów jednostkowych i oddzielanie obszarów trudnych do przetestowania (np. interfejs użytkownika) od obszarów łatwych. Wzorzec robi to poprzez podzielenie kodu na moduły: skromny — zawiera widoki — ma trudne do przetestowania (łatwe operacje, np. przekazanie napisu) i łatwe do przetestowania — zawiera prezentery (sama logika).

Kod obiektów skromnych powinien być maksymalnie prosty: przekazywać dane i sterowanie. Nie powinien przetwarzać danych (modeli widoku), a jedynie wyświetlać to, co dostanie od prezentera. Wydzielenie trudnego kodu (odpowiadającego za przyjmowanie danych i formatowanie danych) do prezentera umożliwia łatwe przetestowanie tych funkcji.

Przykład:

Na ekranie ma zostać wyświetlona na czerwono ujemna wartość salda konta.

Prezenter przygotowuje odpowiednie dane: wartość salda konta, symbol waluty, kolor napisu. Widok w jak najprostszy sposób wykorzystuje te dane do wykonania swojego zadania. Przekazywany jest również napis wyświetlany na przycisku obok salda konta oraz informacja (true/false) o tym, czy przycisk jest aktywny. Widok nie ma żadnej logiki z tym związanej.

Porty zewnętrzne i wewnętrzne

Porty to publiczne interfejsy. Można wyróżnić:

  • Porty wewnętrzne — implementowane na zewnątrz komponentu i używane wewnątrz. Na przykład Przypadek użycia potrzebuje zapisać gdzieś dane. Używa on interfejsu zapisu danych, który zaimplementowany jest w zewnętrznym komponencie (implementującym ten interfejs)
  • Porty zewnętrzne — implementowane są wewnątrz komponentu i wykorzystywane poza nim. Na przykład Prezenter używa interfejsu zdefiniowanego w Przypadkach użycia oraz implementacji, która też tam się znajduje.

Można to zauważyć w Przykład zastosowania OCP: https://karolbocian.pl/blog/2020/05/28/zasady-solid-w-kontekscie-architektury/

Wszystkie posty związane z mini projektem: Budowa czystej architektury:

Źródła

Obraz główny

Obrazy

Materiały

2 myśli nt. „Czysta architektura

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *