Пусть будет известно, что я большой поклонник внедрения зависимостей (DI) и автоматизированного тестирования. Я мог бы говорить об этом весь день.
Фон
Недавно наша команда только что получила этот большой проект, который должен быть построен с нуля. Это стратегическое приложение со сложными бизнес-требованиями. Конечно, я хотел, чтобы он был красивым и чистым, что для меня означало: ремонтопригодность и возможность тестирования. Поэтому я хотел использовать DI.
сопротивление
Проблема была в нашей команде, ДИ это табу. Он был поднят несколько раз, но боги не одобряют. Но это не обескуражило меня.
Мой ход
Это может звучать странно, но сторонние библиотеки обычно не одобрены нашей командой архитекторов (подумайте: «не говорите о Unity , Ninject , NHibernate , Moq или NUnit , чтобы я не порезал вам палец»). Поэтому вместо того, чтобы использовать установленный DI-контейнер, я написал чрезвычайно простой контейнер. Он в основном связал все ваши зависимости при запуске, внедрил все зависимости (конструктор / свойство) и удалил любые одноразовые объекты в конце веб-запроса. Это было чрезвычайно легко и просто делало то, что нам было нужно. И тогда я попросил их пересмотреть это.
Ответ
Ну, чтобы сделать это коротким. Я встретил тяжелое сопротивление. Основным аргументом было: «Нам не нужно добавлять этот уровень сложности в уже сложный проект». Также «Это не значит, что мы будем подключать различные реализации компонентов». И «Мы хотим сделать это простым, если возможно, просто собрать все в одну сборку. DI - это ненужная сложность без выгоды».
Наконец мой вопрос
Как бы вы справились с моей ситуацией? Я не очень хорошо представляю свои идеи, и я хотел бы знать, как люди будут представлять свои аргументы.
Конечно, я предполагаю, что, как и я, вы предпочитаете использовать DI. Если вы не согласны, пожалуйста, скажите почему, чтобы я мог видеть другую сторону медали. Было бы действительно интересно увидеть точку зрения того, кто не согласен.
Обновить
Спасибо за ответы всех. Это действительно ставит вещи в перспективе. Достаточно приятно иметь другой взгляд, чтобы дать вам обратную связь, пятнадцать - это действительно здорово! Это действительно хорошие ответы, которые помогли мне увидеть проблему с разных сторон, но я могу выбрать только один ответ, поэтому я просто выберу один из лучших. Спасибо всем, что нашли время ответить.
Я решил, что это, вероятно, не лучшее время для внедрения DI, и мы не готовы к этому. Вместо этого я сконцентрирую свои усилия на том, чтобы сделать тестируемую конструкцию и попытаться представить автоматизированное модульное тестирование. Я знаю, что написание тестов - это дополнительные издержки, и если когда-нибудь будет решено, что дополнительные издержки не стоят того, лично я все равно буду считать это выигрышной ситуацией, поскольку дизайн все еще подлежит тестированию. И если когда-либо выбор или DI - выбор в будущем, дизайн может легко справиться с этим.