Кажется, что все двигаются к контейнерам IoC. Я попытался некоторое время "застопорить" его, и, насколько я не хочу быть одним из драйверов, чтобы пойти по неправильному пути на шоссе, это все равно не проходит проверку здравого смысла. Позвольте мне объяснить, и, пожалуйста, исправьте/просветите меня, если мои аргументы испорчены:
Мое понимание: контейнеры IoC должны облегчить вашу жизнь при объединении разных компонентов. Это делается путем: a) впрыска конструктора, b) инъекции установщика и c) инъекции интерфейса. Они затем "подключаются" программно или в файл, который считывается контейнером. Затем компоненты вызываются по имени, а затем вручную при необходимости вручную.
То, что я не получаю:
EDIT: (Лучшая фраза) Зачем использовать непрозрачный контейнер, который не является идиоматическим для языка, когда вы можете "подключить" приложение в (imho) гораздо более ясным способом, если компоненты были правильно спроектированы (с использованием шаблонов IoC, развязка)? Как этот "управляемый код" получает нетривиальную функциональность? (Я слышал некоторые упоминания об управлении жизненным циклом, но я не всегда понимаю, как это лучше/быстрее, чем делать сами).
ОРИГИНАЛ: Зачем переходить ко всем длинам хранения компонентов в контейнере, "подключая их" способами, которые не являются идиоматическими для языка, используя вещи, эквивалентные "меткам goto", когда вы вызываете компоненты по имени, а затем теряете многие из преимуществ безопасности статически типизированного языка путем ручного литья, когда вы получите эквивалентную функциональность, не делая этого, и вместо этого используете все классные функции абстракции, данные современными языками OO, например программирование на интерфейс? Я имею в виду, что части, которые действительно должны использовать компонент под рукой, должны знать, что они его используют в любом случае, и здесь вы будете делать "проводку", используя самый естественный, идиоматический способ программирования!