Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MoscowPython Meetup №80 - Алексей Панаэтов

MoscowPython Meetup №80 - Алексей Панаэтов

Алексей Панаэтов (Whoosh, Руководитель департамента).

Расскажем про принцип Dependency Injection (DI).
На конкретных примерах покажем как правильно его использовать в ваших сервисах и какие выгоды он принесёт.

Видео: https://moscowpython.ru/meetup/80/why-use-dependency-injection/

MoscowPython: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru

Moscow Python Meetup
PRO

January 24, 2023
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Инъекция зависимостей
    Что это такое и зачем оно нужно?

    View Slide

  2. Реакции python разработчиков на предложение использовать DI

    View Slide

  3. Пример: магическая функция

    View Slide

  4. Пример: магическая функция
    В коде ниже функция finish_payment неявно зависит от объекта MailServer.

    View Slide

  5. Неявные зависимости - это фу!
    Неявные зависимости делают код и
    жизнь разработчика сложнее.
    1. код сложно читать.
    2. код сложно менять;
    3. юнит-тесты больно писать.

    View Slide

  6. Зависимость через default-ное значение
    Минусы:
    1. Объект MailServer
    создаётся в момент импорта
    модуля.
    2. Billing всё равно знает о
    том, как создавать MailServer.
    3. Возможны циклические
    зависимости.

    View Slide

  7. Зависимость через default-ное значение и фабрику
    Минусы:
    1. На каждый объект нужно
    создавать фабрику.
    2. Billing всё равно знает о
    том, как создавать MailServer.

    View Slide

  8. Централизованная сборка объектов.
    Шаг 1. Делаем mail_server атрибутом инстанса сервиса Billing

    View Slide

  9. Централизованная сборка объектов.
    Шаг 2. Создаем модуль container.py, в котором собираем объекты, явно
    указывая зависимости.

    View Slide

  10. Централизованная сборка объектов.
    Шаг 3. В презентационном слое используем объекты из container.py.

    View Slide

  11. Централизованная сборка объектов.
    Шаг 4. Пишем unit-тест.

    View Slide

  12. DI - это хорошо
    1. Объекты в коде связаны явно,
    зависимости легко находить и
    менять.
    2. Мокать зависимости в юнит-тестах
    максимально просто!
    3. Проектировать систему становится
    проще.

    View Slide

  13. Приходите работать в Whoosh!

    View Slide