Ответ
Да, использовал Clean Architecture (CA) в нескольких проектах. Основные принципы:
- Слои: Domain (бизнес-логика), Data (репозитории, источники данных), Presentation (UI).
- Зависимости: Внутрь (Domain не знает о Data/Presentation).
Пример структуры модуля:
// Domain
interface UserRepository { // Abstraction
suspend fun getUser(): User
}
// Data
class UserRepositoryImpl @Inject constructor(
private val api: UserApi
) : UserRepository { // Implementation
override suspend fun getUser() = api.fetchUser()
}
// Presentation
class UserViewModel @Inject constructor(
private val userRepo: UserRepository // Depends on abstraction
) : ViewModel() {
//...
}
Плюсы:
- Тестируемость (легко мокировать репозитории).
- Гибкость (замена API/DB без изменений в Domain).
Минусы:
- Больше boilerplate-кода.
- Сложность для маленьких проектов.
Использую с Dagger/Hilt для DI и Coroutines/Flow для асинхронности.