Spis treści
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.
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:
- Początek mini projektu: Budowa czystej architektury
- Architektura
- Paradygmaty programowania
- Zasady SOLID w kontekście architektury
- Spójność komponentów
- Łączenie komponentów
- Struktura oprogramowania
- Zasady i poziomy
- Czysta architektura
- Budowanie Czystej architektury
- Podsumowanie projektu: Budowanie czystej architektury
- Moje notatki z nauki szybkiego czytania
Źródła
Obraz główny
Obrazy
Materiały
- Czysta architektura. Struktura i design oprogramowania. Przewodnik dla profesjonalistów — Robert C. Martin.
- https://cezarywalenciuk.pl/blog/programing/clean-architecture–jak-budowac-rozwijalne-oprogramowanie
- https://www.admu.pl/architektura/
Dobry artykuł 🙂
Dzięki 🙂