2.9 Dependency Injection | Курс «Паттерны и практики написания кода»

Поделиться
HTML-код
  • Опубликовано: 5 окт 2024

Комментарии • 6

  • @VorobyevAlexander
    @VorobyevAlexander Год назад

    Чаще через конструктор. Иногда, когда конструктор получается с большим числом параметров, создаю специальный контейнер , с геттерами. И передаю только его. За счет этого возможна и ленивая инициализация.

  • @Varkatel
    @Varkatel Год назад +3

    Мартин Фаулер и Роберт Мартин - это три разных человека

  • @sergeypoprygin2670
    @sergeypoprygin2670 Год назад

    я так и не понял, какая разница между конструктор и интерфейс инджекшен, мне вот всегда казалось, что интерфейс инджекшен - это то же, что и сеттер инджекшен, но вот только методы для зависимости описываются на уровне абстракции, к примеру есть интерфейс LoggerAwareInterface, в нем есть метод setLogger и di механизм после создания нового обьекта проверяет, если созданный обьект имплементит LoggerAwareInterface, то di механизм инджектит новосозданному обьекту обьект логгера через метод setLogger, в зенд фремворке вроде были обьекты инициалайзеры, которые вызывались сразу после создания нового обьекта в di механизме и занимались похожими действиями

    • @AvitoTech
      @AvitoTech  Год назад

      Добрый день!
      В первоисточнике martinfowler.com/articles/injection.html#InterfaceInjection Мартин Фаулер приводит пример. В нём он создаёт класс, который имплементирует интерфейс и затем в конфигурационном контейнере регистрирует классы, которые затем будут автоматически находиться и подставляться в зависимости по их сигнатурам.
      На наш взгляд идея получилась достаточно абстрактной, поэтому в разных языках программирования и библиотеках реализация данного подхода происходит по-разному.
      К сожалению, из-за этого нам было сложно обобщить исходный пример и реальные реализации, используемые разработчиками.

    • @sergeypoprygin2670
      @sergeypoprygin2670 Год назад

      @@AvitoTech >затем в конфигурационном контейнере регистрирует классы, которые затем будут автоматически находиться и подставляться в зависимости по их сигнатурам
      в контейнере регистрируется класс, который сам будет инджектить зависимость новосозданому обьекту, инджектор, в моем примере это инициалайзер, у Фаулера в статье это FinderFilenameInjector, который инджектит строку через метод интерфейса injectFilename обьекту Object target

  • @РоманЛукьянов-ю8р

    Не очень понятный пример для Interface injection.