Я планирую выступить с докладом о внедрении зависимостей и контейнерах IoC, и я ищу хорошие аргументы для его использования.
Каковы наиболее важные преимущества использования этой техники и этих инструментов?
Я планирую выступить с докладом о внедрении зависимостей и контейнерах IoC, и я ищу хорошие аргументы для его использования.
Каковы наиболее важные преимущества использования этой техники и этих инструментов?
Ответы:
Самое главное, для меня, это облегчить следование принципу единой ответственности .
DI / IoC упрощает мне управление зависимостями между объектами. В свою очередь, это облегчает мне разделение согласованной функциональности на собственный контракт (интерфейс). В результате мой код стал гораздо более модульным, так как я узнал о DI / IoC.
Другим результатом этого является то, что мне намного легче увидеть мой путь к дизайну, который поддерживает принцип Open-Closed . Это один из самых вдохновляющих методов (второй после автоматизированного тестирования). Я сомневаюсь, что смог бы поддержать достоинства принципа Открыто-Закрыто.
DI / IoC - это одна из немногих вещей в моей карьере программиста, которая была «изменит правила игры». Существует огромный разрыв по качеству между кодом, который я написал до и после изучения DI / IoC. Позвольте мне подчеркнуть это еще немного. ОГРОМНОЕ улучшение качества кода.
Примеры, которые действительно открыли мне глаза, показали, как это позволяет легко тестировать объекты, созданные таким образом. До этого у меня были проблемы с попыткой изолировать объекты для юнит-теста. Я часто писал тесты для взаимодействия с гораздо более крупной системой. Это было действительно сложно, потому что система в целом была гораздо менее предсказуемой и гораздо более склонной к изменениям, чем отдельные компоненты.
Преимущества инъекций зависимости:
Я думаю, что фактические выгоды являются скорее политическими, чем техническими. DI - это просто альтернатива шаблону Service Locator , не более того. Само по себе это не облегчает соблюдение таких принципов, как SRP или OCP, или разделение слоев. Другие респонденты здесь путают разные концепции и методы, IMO.
Вы можете достичь тех же целей в отношении высокой когезии и низкой связи, используя сервисные локаторы или просто создавая зависимости напрямую, когда это применимо (что происходит в большинстве случаев).
Теперь я знаю, что многие не согласятся с этим мнением. Буду рад обсудить конкретные примеры.
Когда DI используется, чтобы выставлять внутренние объекты с целью тестирования, шаблон использовался неправильно.