Ін'єкційна залежність (DI) - добре відома та модна модель. Більшість інженерів знають його переваги, як-от:
- Можливість / простота ізоляції при тестуванні одиниць
- Явно визначають залежності класу
- Сприяння гарному дизайну (наприклад, принцип єдиної відповідальності (SRP))
- Увімкнення швидкого переключення реалізацій (
DbLogger
замістьConsoleLogger
наприклад)
Я вважаю, що існує загальна думка про галузь, що DI - це корисна модель. Наразі критики не надто багато. Недоліки, про які йдеться у громаді, зазвичай незначні. Дехто з них:
- Збільшена кількість занять
- Створення непотрібних інтерфейсів
В даний час ми обговорюємо дизайн архітектури з моїм колегою. Він досить консервативний, але відкритий. Йому подобається ставити під сумніви речі, які я вважаю гарними, тому що багато людей в ІТ просто копіюють новітні тренди, повторюють переваги і взагалі не думають занадто багато - не аналізуйте занадто глибоко.
Я хотів би запитати:
- Чи слід використовувати ін'єкцію залежності, коли ми маємо лише одну реалізацію?
- Чи слід забороняти створювати нові об'єкти, окрім мовних / рамкових?
- Чи є введення однієї реалізації поганою ідеєю (скажімо, у нас є лише одна реалізація, тому ми не хочемо створювати "порожній" інтерфейс), якщо ми не плануємо одиничне тестування певного класу?
UserService
клас, це просто власник логіки. У нього вводиться з'єднання з базою даних і тести виконуються всередині транзакції, яка повертається назад. Багато хто назвав це поганою практикою, але я виявив, що це працює дуже добре. Вам не потрібно підкреслювати код лише для тестування, і ви отримаєте помилку в пошуку інтеграційних тестів.