Найти в Дзене

Три главные причины начать использовать DI-контейнеры

Оглавление

Возможно вам уже приходилось слышать такие волшебные слова как Инверсия управления, внедрение зависимости, DIP принцип в SOLID, или хотя бы простейший паттерн Стратегия, про который на моем любимом канале ExtremeCode есть отдельное видео. Все эти понятия объединяет один главный принцип - уменьшение связности классов путем использования интерфейсов.

Хочешь сделать свой код лучше - применяй DIP в своем коде
Хочешь сделать свой код лучше - применяй DIP в своем коде

Я тоже далеко не сразу осознал преимущества этого подхода. Но сейчас я для себя выделил три главных принципа, которые мотивируют меня использовать внедрение зависимостей везде, где это возможно:

1. Легкость изменения

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

2. Возможность параллельной разработки

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

3. Возможность тестирования

Как же легко и приятно делать mock-тесты, когда используешь интерфейсы. Просто при конфигурации подменяешь реализации на тестовые и проверяешь основной ход и логику твоего кода на корректность. Экономит кучу времени и сил.

Для тех, кто заинтересовался этой темой, но еще не знаком с ней могу рекомендовать ознакомиться с Simple Injector. Это удобный и простой DI-контейнер, который я сам использую ежедневно.

А ты используешь внедрение зависимостей на практике ну или хотя бы знаком с этим принципом?