Внедрение зависимостей в Swift, а не в данные - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть вопрос о внедрении зависимостей.

Я прочитал этот пост (https://medium.com/better-programming/modern-dependency-injection-in-swift-952286b308be)

Автор сказал, что "Услуги инъекции, а не данные"

в его примере, UserDetailsViewController имеет свою viewmodel (UserDetailsViewModel) и пользовательские данные (var user: User?)

, но, может быть, я думаю, что viewmodel может потребоваться пользователь.

вот так

ex>

class UserDetailsViewModel {
    let user: User
    let service: NetworkModule
    init(user: User, service: NetworkModule) {
        self.user = user
        self.service = service
    }

    func requestUserDetail() {
        service.req(user.id)
    }
}

так что Инжектирование данных неправильно?

1 Ответ

0 голосов
/ 08 апреля 2020

Поскольку статья описывает это

Одна из первых вещей, которые нужно выяснить, состоит в том, что единственная задача внедрения зависимостей заключается в построении графа услуг. Чтобы поместить это в Engli sh, это означает, что система внедрения зависимостей создает и подключает службы и объекты, которые управляют данными приложения.

Сначала давайте выясним, что DI я рекомендую это статья .

Учитывая, что мы уже знаем, что это такое, внедрение служб в этой статье в основном говорит, что внедрение объекта-менеджера, который манипулирует данными вместо введения самих данных, позволяет говорить кодом.

Проверьте следующий пример DI.

struct DataModel {
    // dummy data
}
class Foo  {
    var dataModel: DataModel
    init(dataModel: DataModel){
        self.dataModel = dataModel
    }
}

Это базовый c пример внедрения зависимостей, где вы вводите данные, можете назвать это внедрением данных.

Так что, в конце концов, все это может быть связано с тем, что это такое.

  • Сервис
  • UI
  • Data et c ..

Так что в этой статье он пытается объяснить различия и варианты использования между ними, теперь для упрощенного внедрения служб.

struct DataModel {
    // dummy data
}
class ModelManager { // service class
    func getModel(dataModel: DataModel) -> DataModel{ // service
    return dataModel
    }
}
class Foo  {
    var dataModelManager: ModelManager
    var dataModel: DataModel
    init(dataModelManager: ModelManager, dataModel: DataModel){
        self.dataModelManager = dataModelManager
        self.dataModel = dataModel
        var proccessedData = dataModelManager.getModel(dataModel: dataModel) // service injection
    }
}

Здесь нет большой разницы, но это то, что мы называем внедрением служб.

...