Вопрос проверяет понимание того, как объявлять и хранить зависимости так, чтобы класс был тестируемым и слабо связанным.
Внедряемую зависимость следует представлять в виде абстракции, чаще всего протокола. Она должна передаваться извне, обычно через инициализатор. Внутри класса зависимость хранится как свойство с минимально необходимым интерфейсом. Это делает зависимости явными и упрощает тестирование. Класс перестаёт зависеть от конкретной реализации.
Правильное представление зависимости внутри класса — ключ к соблюдению SOLID.
Перед тем как объявлять зависимость, важно определить её роль и минимальный набор возможностей, которые реально нужны классу.
Зависимость должна быть представлена:
протоколом
а не конкретным классом
protocol UserRepository {
func loadUser()
}
Внутри класса зависимость:
хранится как свойство
имеет уровень доступа let
не создаётся внутри класса
class UserViewModel {
let repository: UserRepository
init(repository: UserRepository) {
self.repository = repository
}
}
зависимости становятся явными
класс легче тестировать
реализацию можно менять без правок класса
Зависимость внутри класса должна быть представлена абстракцией и передаваться извне. Это базовое правило для чистой и поддерживаемой архитектуры.