Я читал о внедрении зависимостей и у меня есть простой вопрос. Я могу понять, как с помощью инжектора конструктора или сеттера необходимые зависимости автоматически связываются структурой DI. Что происходит, когда объект решает, что ему нужно создать новый объект из-за какого-то бизнес-процесса? Нужно ли мне всегда создавать Фабрику в таких ситуациях? Чтобы сделать этот вопрос менее абстрактным, вот пример.
Допустим, я пишу игру Asteriods. Посередине находится корабль, который может вращаться и стрелять в астероиды. Предположим, что корабль был создан, и оценили вещи, введенные. Когда вызывается playerShip.shoot()
, нам нужно создать объект bullet
. Объект маркера должен знать, в каком направлении он движется (direction
) и с чего начать (point
).
Обычно я бы сделал что-то вроде этого:
bullet = new Bullet( direction, point );
Однако это тесно связывает класс PlayerShip с классом Bullet. Как это должно работать при внедрении зависимости? Нужно ли создавать интерфейс BulletFactory и внедрять его реализацию в корабль?
Редактировать: На самом деле я не пишу астероиды. Это был простой пример, который, я думал, люди поймут. Я хотел что-то, что нужно было создать во время выполнения (а не при «подключении объектов»), у которого также были параметры для его конструктора.