Sobes.tech
Middle+

Čo môžete povedať o čistej architektúre?

sobes.tech AI

Odpoveď od AI

Čistá architektúra (Clean Architecture), popularizovaná Robertom Martinom ("Strýko Bob"), predstavuje súbor princípov na organizáciu kódu, zameraných na vytvorenie flexibilného, testovateľného a ľahko udržiavateľného systému.

Hlavné myšlienky:

  1. Rozdelenie na vrstvy: Kód sa delí na koncentrické kruhy, kde vnútorné vrstvy obsahujú biznis logiku, a vonkajšie — detaily implementácie (UI, databázy, externé API).
  2. Závislosť od vnútorných vrstiev: Vonkajšie vrstvy závisia od vnútorných, ale nie naopak. Toho sa dosahuje princípom invertovania závislostí.
  3. Inkapsulácia: Každá vrstva skrýva detaily svojej implementácie pred vonkajšími vrstvami.
  4. Testovateľnosť: Biznis logika, nachádzajúca sa v centrálnych vrstvách, nezávisí od vonkajších detailov, čo ju robí ľahko testovateľnou v izolácii.
  5. Nezávislosť od rámcov: Hlavné pravidlá biznisu nie sú viazané na konkrétne rámce, UI alebo databázy.

Vrstvy (príklad):

  • Entities: Obsahujú biznis objekty a pravidlá (napríklad, trieda User s biznis logikou, súvisiacou s používateľom).
  • Use Cases (Interactors): Obsahujú špecifickú pre aplikáciu biznis logiku (napríklad, GetUserUseCase). Koordinujú interakciu medzi Entities a Gateway rozhraniami.
  • Interface Adapters: Prispôsobujú dáta z vonkajších zdrojov do formátu, ktorý je pochopiteľný pre Use Cases a Entities (napríklad, Presenters pre UI, Gateway Implementations pre databázy).
  • Frameworks & Drivers: Vonkajšia vrstva, obsahujúca frameworky (UI, databázy, webové služby).

Princíp invertovania závislostí zohráva kľúčovú úlohu. Vnútorné vrstvy definujú rozhrania (Gateway Interfaces), a vonkajšie vrstvy implementujú tieto rozhrania. To je znázornené na nasledujúcej schéme:

+-----------------+      +-------------------+      +--------------------+      +------------------------+
| Frameworks &    |----->|   Interface       |<-----|    Use Cases       |<-----|        Entities          |
| Drivers (UI, DB)|      |   Adapters        |      |  (Interactors)     |      |      (Business Rules)    |
+-----------------+      |  (Presenters,     |      |                    |      +------------------------+
                         |  Gateway Impls)   |      |                    |
                         +-------------------+      +--------------------+

Šípky ukazujú smer závislostí. Všetky závislosti sú smerované dovnútra, ku vrstve Entities.

V Android vývoji sa Clean Architecture často realizuje s použitím týchto komponentov:

  • UI Layer (Presentation): Activity, Fragment, ViewModel, UI Logic. Závisí od Domain Layer.
  • Domain Layer (Use Cases): Biznis logika aplikácie. Nezávisí od iných vrstiev.
  • Data Layer: Zdroj dát (siete, databázy), repozitáre. Implementuje rozhrania definované v Domain Layer.

Príklad štruktúry:

root
├── app
│   ├── src
│   │   └── main
│   │       └── java
│   │           └── com
│   │               └── example
│   │                   └── myapp
│   │                       ├── presentation  // UI vrstva (ViewModel, Activities, Fragments)
│   │                       │   ├── ui
│   │                       │   └── viewmodel
│   │                       ├── domain      // Doménová vrstva (Use Cases, Entities, Interfaces)
│   │                       │   ├── entity
│   │                       │   ├── repository  // Doménové rozhrania
│   │                       │   └── usecase
│   │                       └── data        // Data vrstva (Repozitáre, Data Sources, Mappers)
│   │                           ├── local       // Lokálny Data Source (Room)
│   │                           ├── remote      // Vzdialený Data Source (Retrofit)
│   │                           ├── mapper
│   │                           └── repository  // Data implementácie rozširujúce doménové rozhrania
│   └── build.gradle
└── build.gradle

Výhody:

  • Testovateľnosť: Biznis logika je izolovaná a ľahko testovateľná.
  • Flexibilita: Jednoducho nahradiť vonkajšie závislosti (napríklad, prejsť z Room na Realm).
  • Udržateľnosť: Jasné rozdelenie zodpovedností robí kód ľahším na pochopenie a údržbu.
  • Nezávislosť od technológie: Biznis logika nie je viazaná na špecifické Android rámce alebo knižnice.

Nevýhody:

  • Zložitosť: Môže byť spočiatku zložitejšia na pochopenie a realizáciu, najmä pre malé projekty.
  • Viac kódu: Vyžaduje písanie väčšieho množstva tried a rozhraní v porovnaní s jednoduchšími architektúrami.

Celkovo je Clean Architecture mocný prístup na tvorbu škálovateľných a udržiavateľných Android aplikácií, najmä pre projekty strednej a veľkej zložitosti. Podporuje vývoj okolo biznis logiky, nie technických detailov.