Clean Architecture — общий подход к реализации архитектуры приложения. Соблюдение принципов чистой архитектуры позволяет писать легко изменяемый и легко тестируемый код. Такой подход к разработке позволяет избежать зависимости от сторонних библиотек и конкретных реализаций. Это упрощает процесс внесения изменений на всех этапах разработки. Подробнее можно прочесть здесь.
com.livetyping.example
|----di
|----LiveTypingApplication.kt
В модуле App содержится пакет di, в котором модули, которые содержат информацию о том, как предоставлять объекты.
К нему подключаются все другие модули.
implementation project(":app-ui")
implementation project(":app-domain")
implementation project(":app-data")
com.livetyping.example
|---- data
| |---- device.repository
| | |---- AndroidBiometricRepository
| | |---- AndroidResourcesRepository
| |---- net
| | |---- models
| | | |---- SendLiveTypingRequest
| | | |---- LoginRequest
| | |---- repository
| | | |---- LiveTypingRepositoryImp
| | | |---- LoginRepositoryImp
| | |---- retrofit
| | | |---- HeadersInterceptor
| | |---- services
| | | |---- LiveTypingService
| | | |---- LoginService
| |---- storage
| | |---- datebase
| | | |-------...
| | |---- preferences
| | | |-------...
Слой Data содержит реализацию интерфейсов репозиториев из бизнес-слоя, пакеты, в которых реализована работа с источниками данных (rest, db, sockets, shared preferences и т.п.).
Зависимость:
implementation project(":app-domain")
com.livetyping.example
|---- domain
| |---- interactor
| | |---- interfaces
| | | |---- LiveTypingInteractor
| | | |---- LoginLInteractor
| | |---- LiveTypingInteractorImp
| | |---- LoginInteractorImp
| |---- model
| | |---- LiveTyping
| | |---- TokenDomain
| |---- datacontracts
| | |---- device
| | | |---- BiometricRepository
| | | |---- ResourcesRepository
| | |---- net
| | | |---- LiveTypingRepository
| | | |---- LoginRepository
| | |---- storage
| | | |---- AuthorizationStorageRepository
Слой Domain содержит data-классы (модели данных, структуры), классы логики — интеракторы/UseCase — и репозитории, с которыми работают интеракторы/UseCase. Следует обратить особое внимание внимание на то, что файлы в пакете repository — это интерфейсы. Реализовываются они в слое Data.
interface LoginRepository {
suspend fun authByPassword(body: AuthByPasswordBody): TokenDomain
suspend fun authBySmsCode(body: AuthOrVerifySmsCodeBody): TokenDomain
}
com.livetyping.example
|---- ui
| |---- services
| |---- receivers
| |---- screens
| | |---- livetyping
| | |---- login
| | | |---- LoginFragment
| | | |---- LoginViewModel
| |---- common
| | | |---- callbaks
| | | |---- base
| | | |---- utils
| | | |---- views
Слой Presentation (UI) содержит пакеты base для реализации базовых классов паттерна MVVM/MVP, которые можно переиспользовать на нескольких экранах приложения. Пакет screens содержит отдельные пакеты для каждого экрана приложения, в которых реализованы подклассы базовых ViewModel/Presenter, View, Fragment, Activity.
Зависимости: