Sobes.tech
Middle+

Šta možete reći o čistoj arhitekturi?

sobes.tech АИ

Одговор од АИ

Чиста архитектура (Clean Architecture), популаризирана од Роберт Мартин ("Џоја Боб"), представља скуп принципа за организовање кода, усмерених ка стварању флексибилног, тестирачког и лако одрживог система.

Основне идеје:

  1. Дељење на слојеве: Код се дели на концентричне кругове, где унутрашњи садрже пословну логику, а спољашњи — детаље реализације (UI, базе података, спољашњи API).
  2. Зависност од унутрашњих слојева: Спољашњи слојеви зависе од унутрашњих, али не обрнуто. Ово се постиже принципом инверзије зависности.
  3. Инкапсулација: Сваки слој скрива детаље своје реализације од спољашњих слојева.
  4. Тестирање: Пословна логика, налази се у централним слојевима, не зависи од спољашњих детаља, што је чини лаком за тестирање у изолацији.
  5. Независност од оквира: Основна правила пословања нису везана за конкретне оквире, UI или базе података.

Слојеви (пример):

  • Entities: Садрже пословне објекте и правила (на пример, класа User са пословном логиком, везаном за корисника).
  • Use Cases (Interactors): Садрже специфичну за апликацију пословну логику (на пример, GetUserUseCase). Они оркестрирају интеракцију између Entities и Gateway интерфејса.
  • Interface Adapters: Адаптирају податке из спољашњих извора у формат који је разумљив за Use Cases и Entities (на пример, Presenters за UI, Gateway Implementations за базе података).
  • Frameworks & Drivers: Спољашњи слој, садржи оквире (UI, базе података, веб сервиси).

Принцип инверзије зависности игра кључну улогу. Унутрашњи слојеви дефинишу интерфејсе (Gateway Interfaces), а спољашњи слојеви реализују те интерфејсе. Ово је приказано на следећој шеми:

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

Стрелице показују смер зависности. Све зависности су усмерене унутра, ка слоју Entities.

У Android развоју, Чиста архитектура се често реализује коришћењем ових компоненти:

  • UI Layer (Presentation): Activity, Fragment, ViewModel, UI Logic. Зависност од Domain Layer.
  • Domain Layer (Use Cases): Пословна логика апликације. Не зависи од других слојева.
  • Data Layer: Извори података (мреже, базе података), репозиторији. Реализује интерфејсе, дефинисане у Domain Layer.

Пример структура:

root
├── app
│   ├── src
│   │   └── main
│   │       └── java
│   │           └── com
│   │               └── example
│   │                   └── myapp
│   │                       ├── presentation  // UI слој (ViewModel, Activities, Fragments)
│   │                       │   ├── ui
│   │                       │   └── viewmodel
│   │                       ├── domain      // Домен слој (Use Cases, Entities, Interfaces)
│   │                       │   ├── entity
│   │                       │   ├── repository  // Домен интерфејси
│   │                       │   └── usecase
│   │                       └── data        // Податак слој (Репозиторији, Data Sources, Mappers)
│   │                           ├── local       // Локални Data Source (Room)
│   │                           ├── remote      // Remote Data Source (Retrofit)
│   │                           ├── mapper
│   │                           └── repository  // Data имплементације које проширују Domain интерфејсе
│   └── build.gradle
└── build.gradle

Предности:

  • Тествирљивост: Пословна логика је изолована и лако тестирана.
  • Флексибилност: Лако заменити спољашње зависности (нпр. прелазак са Room на Realm).
  • Одрживост: Јасно раздвајање одговорности чини код лакшим за разумевање и одржавање.
  • Независност од технологије: Пословна логика није везана за специфичне Android оквире или библиотеке.

Недостаци:

  • Комплексност: Може бити првобитно сложенија за разумевање и имплементацију, посебно за мале пројекте.
  • Више кода: Захтева писање већег броја класа и интерфејса у поређењу са једноставнијим архитектурама.

У целини, Чиста архитектура је моћан приступ за креирање скалабилних и одрживих Android апликација, посебно за пројекте средње и велике сложености. Она подстиче развој око пословне логике, а не техничких детаља.