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
Интеракција између слојева:
- View позива метод ViewModel.
- ViewModel позива одговарајући Use Case (пословна логика).
- Use Case приступа интерфејсима репозиторија из Domain Layer-а.
- Реализације репозиторија (у Data Layer-у) добијају податке из извора (мрежа, база података).
- Репозиторији претварају податке у доменске ентитете и враћају их Use Case-у.
- Use Case обрађује податке и враћа резултат ViewModel-у.
- ViewModel ажурира податке који се приказују у View-у.
Користећи чисту архитектуру, могуће је:
- Побољшати тестираност: Сваки слој може бити тестирано изоловано.
- Повећати одрживост: Промене у једном слоју минимално утичу на друге.
- Повећати флексибилност: Лакше је заменити имплементације извора података или UI приказ.
- Смањити повезаност: Одвојити пословну логику од детаља имплементације.