Ответ
Dependency Inversion Principle (DIP) в Clean Architecture означает, что модули верхнего уровня (доменные сущности, use cases) не должны зависеть от модулей нижнего уровня (репозитории, фреймворки). Вместо этого оба уровня зависят от абстракций (интерфейсов).
Пример:
// Domain layer (не зависит от деталей)
interface UserRepository {
suspend fun getUser(id: String): User
}
class GetUserUseCase(private val repo: UserRepository) {
suspend operator fun invoke(id: String) = repo.getUser(id)
}
// Data layer (реализует интерфейс)
class UserRepositoryImpl @Inject constructor(
private val api: UserApi
) : UserRepository {
override suspend fun getUser(id: String) = api.fetchUser(id)
}
Ключевые моменты:
- UseCase зависит только от интерфейса
UserRepository - Реализация
UserRepositoryImplможет меняться без изменения домена - Направление зависимостей идет к центру (домену)