Как слои работают между собой в чистой архитектуре

«Как слои работают между собой в чистой архитектуре» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Clean Architecture слои взаимодействуют через интерфейсы, соблюдая правило зависимостей (внутренние слои не зависят от внешних).

  1. Domain (ядро) – содержит бизнес-логику и entities. Не зависит ни от чего.
  2. Data – реализует репозитории (интерфейсы из Domain), работа с API/БД.
  3. 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() } }  
}  

Коммуникация между слоями – через абстракции (интерфейсы), что упрощает тестирование и замену реализаций.