Я планую поговорити про залежність впорскування та контейнери IoC, і шукаю кілька хороших аргументів для його використання.
Які найважливіші переваги використання цієї техніки та цих інструментів?
Я планую поговорити про залежність впорскування та контейнери IoC, і шукаю кілька хороших аргументів для його використання.
Які найважливіші переваги використання цієї техніки та цих інструментів?
Відповіді:
Найголовніше для мене - це спрощення слідування принципу єдиної відповідальності .
DI / IoC спрощує мене для управління залежностями між об'єктами. У свою чергу, це полегшує мені виведення когерентної функціональності на власний контракт (інтерфейс). Як результат, мій код був набагато більш модульованим з часу, коли я дізнався про DI / IoC.
Іншим результатом цього є те, що я набагато легше бачу свій шлях до дизайну, який підтримує принцип відкритого типу . Це одна з найнадійніших методик натхнення (поступається лише автоматизованому тестуванню). Я сумніваюся, що міг би достатньо підтримувати чесноти принципу відкритого закриття.
DI / IoC - одна з небагатьох речей у моїй програмістській кар’єрі, яка була "зміною ігор". Існує величезна різниця в якості між кодом, який я писав до і після вивчення DI / IoC. Дозвольте підкреслити, що ще кілька. ВЕЛИЧЕЗНЕ поліпшення якості коду.
На прикладах, які справді відкривали мені очі, було бачити, як це дало змогу легко контролювати об'єкти, створені таким чином. До цього у мене виникли проблеми при спробі виділити об'єкти для одиничного тесту. Я часто писав би тести для взаємодії зі значно більшою системою. Це було дійсно важко, оскільки система в цілому була набагато менш передбачуваною та набагато більш схильною до зміни окремих компонентів.
Перевагами ін'єкцій залежностей є:
Я думаю, що фактичні вигоди є більш політичними, ніж технічними. DI - це просто альтернатива шаблону пошуку локальних служб , не більше того. Саме по собі це не полегшує дотримання таких принципів, як SRP або OCP, або декупаж шарів. Інших респондентів тут плутають різні поняття та методи, ІМО.
Ви можете досягти одних і тих же цілей щодо високої згуртованості та низької зв'язаності, використовуючи Локатори сервісу, або просто інстанціюючи залежності безпосередньо, коли це можливо (що є більшою частиною часу).
Тепер я знаю, що багато хто не погодиться з цією думкою. Я буду радий обговорити конкретні приклади.
Коли DI використовується для викриття внутрішніх предметів з метою тестування, зразок зловживається.