Skip to content

Commit 687e88e

Browse files
committed
event bus published and clean architecture diagrams added
1 parent 1a9d0e6 commit 687e88e

File tree

4 files changed

+327
-2
lines changed

4 files changed

+327
-2
lines changed

_drafts/2019-09-02-clean_architecture.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ keywords: "clean, architecture, wzorzec, pattern, architektura, warstwy, zalezno
1616
## Warstwy
1717
W klasycznym podejściu można wyróżnić cztery warstwy: `Entities`, `Use Cases`, `Interface Adapters`, `Framework and Drivers`. Jednakże nie jest to ogólna i jedyna słuszna propozycja. Podział oprogramowania na warstwy zależy od środowiska, wielkości i złożoności aplikacji, postawionych wymagań oraz kalkulacji kosztów i zysków. Równie dobrze może się okazać, że optymalna implementacja realizowana jest w oparciu inną liczbę okręgów. `Warstwa Entities` to reguły biznesowe wspólne dla wszystkich aplikacji w projekcie. Mogą to być obiekty z metodami czy też zbiory struktur danych i funkcji. `Warstwa Use Cases` zawiera reguły biznesowe specyficzne dla danej aplikacji. Implementuje przypadki użycia systemu, które sterują przepływem danych między podmiotami. `Warstwa Interface Adapters` jest zestawem adapterów odpowiedzialnych za konwersje danych z warstw `Use Cases` i `Entities` do zewnętrznych agentów. To tutaj przeważnie znajdują się klasy implementujące architekturę aplikacji (np. `View`, `Presenter`, `Controller`). `Warstwa Framework and Drivers` składa się z różnych zewnętrznych bibliotek, sterowników i narzędzi. W tym miejscu pojawiają się wszystkie szczegóły zewnętrznych wywołań, które są przekazywane do kolejnych wewnętrznych okręgów.
1818

19-
//TODO diagram
19+
![Clean Architecture diagram](/assets/img/diagrams/architecture/clean_architecture.svg){: .center-image }
2020

2121
## Zastosowanie
2222
Zastosowanie dowolnej architektury systemu pomimo różnic posiada jeden wspólny cel, podział odpowiedzialności i zagrożeń poprzez rozdzielenie oprogramowania na warstwy. `Clean Architecture` wpisuje się w ten trend i podobnie jak inne architektury jego użycie dostarcza wielu korzyści. Pozwala na tworzenie systemów niezależnych od framework dzięki czemu biblioteki moga być wymienne i traktowane jako narzędzia. Ułatwia testowanie reguł biznesowych ze względu na ich separacje od interfejsu użytkownika i źródeł danych. Ponadto umożliwia zmianę interfejsu użytkownika oraz źródeł danych bez dokonywania modyfikacji w pozostałych obszarach kodu. `Clean Architecture` nie jest związany z żadną konkretną architekturą w związku z czym może zostać zaadaptowany do większości wzorców architektonicznych takich jak `MVC`, `MVP`, `MVMM`, `MVI`.
2323

2424
## Android
2525
Jedną z najpopularniejszych praktyk realizacji `Clean Architecture` dla `Android` jest wyróżnienie trzech warstw: `Presentation`, `Domain`, `Data`. Warstwa `Presentation` zawiera interfejs użytkownika oraz jego obsługę, `Domain` posiada klasy danych i definicję przypadków użycia natomiast `Data` składa się z repozytoriów i zewnętrznych źródeł danych. Odwołując się do klasycznej definicji `Clean Architecture` możliwe jest zastosowanie jeszcze szerszego podziału poprzez wyłączenie m.in. przypadków użycia z `Domain` do osobnej warstwy `Use Cases` oraz właściwych źródeł danych do warstwy `Framework`.
2626

27-
//TODO diagram
27+
![Clean Architecture Android diagram](/assets/img/diagrams/architecture/clean_architecture_flow.svg){: .center-image }
2828

2929
## Przykład
3030
Aplikacja Filmhead umożliwia zarządzanie prywatną listą filmów użytkownika. Filmy mogą zostać dodane do listy obserwowanych, natomiast te obejrzane mogą być ocenione. Projekt posiada dedykowane aplikacje w wersji `przeglądarkowej` oraz na urządzenia z systemem `Android`. Z uwagi na zachowanie spójności działania aplikacji na wszystkich platformach oraz współdzielenie części kodu zdecydowano się na zastosowanie `Clean Architecture` w wariancie pięciu warstw: `Presentation`, `Use Cases`, `Domain`, `Data`, `Framework`. W przypadku aplikacji mobilnej należy podjąć także decyzję o wyborze wzorca architektonicznego (np. `MVP`).
File renamed without changes.
Lines changed: 92 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)