В прошлом году я создал новую систему, используя Dependency Injection и контейнер IOC. Это научило меня много о DI!
Однако даже после изучения концепций и правильных шаблонов я считаю сложной задачей отделить код и внедрить контейнер IOC в устаревшее приложение. Приложение достаточно велико до такой степени, что истинная реализация будет подавляющей. Даже если ценность была понята и время было предоставлено. Кому предоставлено время для чего-то подобного?
Цель курса - привести юнит-тесты в бизнес-логику!
Бизнес-логика, которая переплетается с вызовами базы данных для предотвращения тестирования.
Я прочитал статьи и понимаю опасности инъекций зависимостей бедного человека, как описано в этой статье в Los Techies . Я понимаю, что на самом деле ничего не отделяет.
Я понимаю, что это может повлечь за собой значительный системный рефакторинг, поскольку реализации требуют новых зависимостей. Я бы не стал использовать его в новом проекте любого размера.
Вопрос: Можно ли использовать DI для «Бедного человека», чтобы ввести тестируемость в унаследованное приложение и начать работу?
Кроме того, является ли использование DI Бедного человека в качестве низового подхода к истинной инъекции зависимостей ценным способом разъяснить необходимость и преимущества принципа?
Можете ли вы провести рефакторинг метода, который имеет зависимость от вызовов базы данных и абстрагировать этот вызов за интерфейсом? Простая абстракция сделает этот метод тестируемым, поскольку фиктивная реализация может быть передана через перегрузку конструктора.
В будущем, как только усилия получат поддержку, проект может быть обновлен для реализации контейнера IOC, и там будут конструкторы, которые принимают абстракции.
I consider it a challenge to decouple code and introduce an IOC container into a legacy application
конечно это. Это называется технический долг. Вот почему перед любым серьезным обновлением предпочтительнее небольшой и непрерывный рефакторинг. Сокращение основных недостатков дизайна и переход на IoC будет менее сложным.