Ответ
В Clean Architecture слои взаимодействуют через интерфейсы, соблюдая правило зависимостей (внутренние слои не зависят от внешних).
- Domain (ядро) – содержит бизнес-логику и entities. Не зависит ни от чего.
- Data – реализует репозитории (интерфейсы из Domain), работа с API/БД.
- Presentation – зависит от Domain, использует UseCases для бизнес-логики.
Пример:
// Domain
interface UserRepository {
suspend fun getUser(): User
}
// Data
class UserRepositoryImpl : UserRepository {
override suspend fun getUser() = api.getUser()
}
// Presentation
class UserViewModel(private val getUserUseCase: GetUserUseCase) : ViewModel() {
fun loadUser() { viewModelScope.launch { getUserUseCase() } }
}
Коммуникация между слоями – через абстракции (интерфейсы), что упрощает тестирование и замену реализаций.