Connect with us

Разработка

Инъекция зависимостей или локатор служб?

Два основных подхода — инъекция зависимостей и локатор служб, и выбор между ними может иметь большее значение, чем вы думаете.

Фото аватара

Опубликовано

/

     
     

Скорее всего, вы уже используете ту или иную форму инверсии зависимостей, чтобы сделать свой код более гибким, читаемым и тестируемым, но задумывались ли вы о том, какую модель инверсии управления вы используете и почему это может иметь значение? Два основных подхода — инъекция зависимостей и локатор служб, и выбор между ними может иметь большее значение, чем вы думаете.

Инъекция зависимостей

В схеме Dependency Injection, например в Dagger/Hilt, вы предоставляете свои зависимости в граф, а во время компиляции генерируется логика создания объекта. Этот шаг очень важен, поскольку в этот момент вы узнаете, не забыли ли вы предоставить зависимость, и можете быстро устранить ошибку. Это означает, что во время выполнения программы не произойдет неожиданного сбоя из-за того, что не удалось разрешить зависимость.

Локатор служб

В схеме Service Location, подобной Koin, вы предоставляете свои зависимости, а во время выполнения они помещаются в контейнер инверсии управления (IoC-контейнер). Затем вы запрашиваете объекты из IoC-контейнера по мере необходимости. Из-за разрешения во время выполнения не гарантируется, что запрашиваемый объект будет существовать в контейнере, что может привести к сбоям во время выполнения. Кроме того, в рамках фреймворка Service Location объекты должны создаваться и храниться в контейнере, что может привести к дополнительным накладным расходам, если нет механизма ленивой загрузки или кэширования экземпляров.

Заключение

По моему опыту, компромиссы, связанные с простотой и легкостью настройки Service Location, редко окупаются в долгосрочной перспективе по сравнению с безопасностью Dependency Injection на этапе компиляции. Нет более неприятного ощущения, чем падение приложения из-за того, что вы предположили, что объект должен быть там, а его там не оказалось.

Примечания

  • На сайте Koin указано, что это фреймворк инъекции зависимостей. Хотя он и занимается подключением и созданием объектов, он все же определяет их местоположение во время выполнения, если вы используете module и get() стратегию . Я соглашусь с тем, что он работает в этом направлении, но оставлю его в противовес Hilt.
  • В прошлом месяце Koin выпустил Koin-Annotations версии 1.3.0, в которой добавлены проверки безопасности во время компиляции, что позволяет полностью перейти в сферу инъекции зависимостей — захватывающее развитие событий!

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Наши партнеры:

LEGALBET

Мобильные приложения для ставок на спорт
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: