Я читал о внедрении зависимостей и понимаю основную концепцию, согласно которой метод должен получать то, что ему нужно, от вызывающего, а не создавать такие элементы самому. В результате, new
операторы удаляются из метода почти полностью (некоторые базовые объекты, конечно, будут освобождены - один из примеров, который я нашел, был для таких вещей, как StringBuilder
s, которые кажутся безумными иметь пройти).
Мой вопрос звучит обманчиво простым, но я подозреваю, что ответ на самом деле довольно сложный: куда делись все операторы new
?
Поначалу ответ кажется простым: оператор new
просто выталкивается в метод, который вызывает метод, которому нужен объект. Проблема с этим, однако, заключается в том, что вызывающий метод, вероятно, также тестируется, и поэтому new
подталкивается от вызывающего метода к вызывающему методу, пока в конечном итоге вы не доберетесь до корневого метода (который на данный момент кажется безумным непроверенным), который создает непристойное количество объектов для использования в различных точках стека вызовов. Ситуация становится еще более сложной, если учесть, что этот корневой метод является корнем множества других методов, и поэтому для каждого случая потребуется создание объектов. Это также создает проблему с производительностью, поскольку вы быстро останетесь с большим количеством объектов, которые фактически никогда не используются, но которые должны быть созданы в любом случае «на всякий случай».
Для меня совершенно очевидно, что я упустил некоторые важные знания, которые настолько очевидны для других разработчиков, что никто не подумает описать это в сообщении в блоге. Однако я, очевидно, не могу знать, чего я не знаю, поэтому я смиренно прошу, чтобы я раскрыл секрет: куда делись все операторы new
?
Я должен упомянуть, что я занимаюсь разработкой на PHP, поэтому каждый запрос начинается с одной и той же точки, и кажется, что корневой "метод" в index.php
должен охватывать все, что приложение может do, чтобы гарантировать, что он предоставляет объект для всего, что сделает в текущем запросе. Опять же, здесь есть фундаментальное недоразумение, и я бы очень хотел его исправить.