Можете ли вы объяснить, почему внедрение контейнера хорошо и плохо, и почему объекты, извлеченные из контейнера, не являются зависимостью от их хост-класса?

Я смотрю на это: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container-meta.md#4-recommended-usage-container-psr-and-the-service-locator

Q1:

Под "BadExample" это показывает ContainerInterface вводится в __constructor, и это "плохо". Но позже, ContainerInterface вводится в RouterExample и это вдруг "Хорошо". Позже то же самое происходит с ExampleFactory и, вероятно, тоже хорошо.

Можете ли вы объяснить, как делать одно и то же может быть как хорошо, так и плохо?

Q2:

Есть комментарий, говорящий: "Это нормально, маршрутизатор находит соответствующую запись контроллера, контроллер не является зависимостью от маршрутизатора". Я не понимаю, почему это нормально ".

1 ответ

Использование DI-контейнера в рамках вашего приложения для разрешения доменных служб является целью ExampleFactory в статье.

Например, в веб-приложении входящий HTTP-запрос передается фабрике, которая пытается создать экземпляр контроллера. Эта фабрика контроллеров - отличное место, чтобы иметь контейнер DI (действительно, многие контейнеры DI переопределяют эту фабрику по умолчанию). В статье даже говорится:

фабричные объекты, единственной целью которых является создание и возврат новых экземпляров, могут использовать шаблон локатора службы

Фабрика контроллеров в нашем веб-приложении не зависит от контроллера, который он пытается создать, а занимается только поиском контроллера, чтобы можно было обработать HTTP-запрос.

И наоборот, объект домена не должен заботиться о разрешении зависимостей по всем (и более) причинам, о которых говорится в статье.

Другие вопросы по тегам