Я полагаю, что предположение об уменьшенной скорости выполнения - это тот же аргумент, что и "C быстрее, чем C # / Java". Хотя это утверждение может быть верным для конкретных операций и / или структурно простых задач, это не тот случай, когда сложность возрастает.
Способ, которым DI-каркасы позволяют вам сосредоточиться на создании объектов и зависимостей, создает более эффективные системы при увеличении размера кода. Для больших приложений я почти уверен, что код на основе DI-инфраструктуры превзойдет любое альтернативное решение. В среде выполнения просто так мало избыточности, что трудно сделать ее более эффективной! Большая часть дополнительных служебных данных также возникает при первой загрузке.
Расширенные DI-контейнеры также позволяют вам создавать магию "объема", о которой вы можете только мечтать без контейнера. Используя объем-прокси, spring может выполнять следующие действия:
A Singleton
|
B Singleton
|
C Prototype (per-invocation)
|
D Singleton
|
E Session scope (web app)
|
F Singleton
Эффективно, вы можете иметь десять слоев одноэлементных объектов, и внезапно появляется что-то в рамках сеанса.
Такие вещи, как безопасность, могут вводиться совершенно другим способом, чем в противном случае. Часто существует классический парадокс: часто уровень графического интерфейса должен иметь сложные знания о разрешениях безопасности. Довольно часто уровень обслуживания также нуждается в этом, но часто на другом уровне детализации (обычно менее подробный, чем графический интерфейс). Классический подход заключается в том, чтобы отправить его в виде параметров, поместить в локальный поток или запросить службу. С весной вы можете просто ввести его прямо туда, где вам это нужно, и никто больше не должен знать.
Это фактически меняет разработку приложений в целом. Мне было очень трудно приспособиться к этому, но после этой боли я вижу, что это действительно намного ближе к тому, как все должно быть (в отличие от того, как мы научились это делать).
Так что я думаю, что структуры DI могут изменить способ создания программ с гораздо более серьезными последствиями, чем просто DI. Это не просто прославленный способ назвать новый .