Sobes.tech
Middle+

Da li imate iskustva sa projektima realizovanim na čistoj arhitekturi?

sobes.tech АИ

Одговор од АИ

Да, постоји.

При развоју на чистој архитектури користио сам следеће слојеве:

  • Domain слој: Садржи пословну логике и ентитете. Не зависи од других слојева. Одређује Use Cases (интеракторе) и интерфејсе репозиторија.
  • Data слој: Реализује интерфејсе репозиторија из Data Layer-а. Укључује рад са подацима (мрежа, базе података, SharedPreferences). Често се користе репозитори за претварање података из спољашњих извора у доменске ентитете.
  • Presentation слој: Садржи View (Fragment, Activity) и Presenter/ViewModel. Одговоран је за приказивање података и интеракцију са корисником. Позива Use Cases из Domain Layer-а.

Зависности између слојева:

  • Presentation слој зависи од Domain слоја.
  • Data слој зависи од Domain слоја.

Модели и принципи који се примењују у чистој архитектури:

  • SOLID: Посебно принцип инверзије зависности (Dependency Inversion Principle).
  • Dependency Injection: За поједностављење тестирања и управљања зависностима (нпр. коришћењем Dagger, Koin).
  • Repository Pattern: Апстракција изнад извора података.
  • Use Cases (Interactors): Представљају конкретне операције у пословној логики.

Пример структуре пројекта:

├── app
│   ├── build.gradle
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── example
│           │           └── myapp
│           │               ├── data // Реализације репозиторија, извори података
│           │               │   ├── datasource
│           │               │   └── repository
│           │               ├── domain // Пословна логика, Use Cases, ентитети, интерфејси репозиторија
│           │               │   ├── entity
│           │               │   ├── repository
│           │               │   └── usecase
│           │               └── presentation // View-слој, ViewModel/Presenter
│           │                   ├── ui
│           │                   └── viewmodel
│           └── res

Интеракција између слојева:

  1. View позива метод ViewModel.
  2. ViewModel позива одговарајући Use Case (пословна логика).
  3. Use Case приступа интерфејсима репозиторија из Domain Layer-а.
  4. Реализације репозиторија (у Data Layer-у) добијају податке из извора (мрежа, база података).
  5. Репозиторији претварају податке у доменске ентитете и враћају их Use Case-у.
  6. Use Case обрађује податке и враћа резултат ViewModel-у.
  7. ViewModel ажурира податке који се приказују у View-у.

Користећи чисту архитектуру, могуће је:

  • Побољшати тестираност: Сваки слој може бити тестирано изоловано.
  • Повећати одрживост: Промене у једном слоју минимално утичу на друге.
  • Повећати флексибилност: Лакше је заменити имплементације извора података или UI приказ.
  • Смањити повезаност: Одвојити пословну логику од детаља имплементације.