@magary4

Получаются тяжелые конструкторы с большим количеством инжекшен параметров?

public function __construct(
        Request $request,
        $router,
        Storage $storage,
        $user,
        Session $session,
        TranslatorInterface $translator,
        DocumentRepository $documentRepository,
        \Swift_Mailer $mailer,
        EngineInterface $templating,
        $checkout_email,
        WishlistOrderManager $wishlistOrderManager
    )
    {
        $this->request = $request;
        $this->router = $router;
        $this->storage = $storage;
        $this->user = $user;
        $this->session = $session;
        $this->translator = $translator;
        $this->documentRepository = $documentRepository;
        $this->mailer = $mailer;
        $this->templating = $templating;
        $this->checkout_email = $checkout_email;
        $this->wishlistOrderManager = $wishlistOrderManager;
    }


так и хочется инжектить контейнер и оттуда доставать все после ижекшена

читал что так не делают чтоб не зависеть от контейнера и в будушем можно было поменять фрейворк
но вот при таком количестве зависимостей я вижу что не так-то легко поменять этот фреймворк и сам не верю что это когда-то случится
так ли действительно нужно быть независимым от контейнера?
  • Вопрос задан
  • 331 просмотр
Пригласить эксперта
Ответы на вопрос 2
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Дело не только в независимости от контейнера, а в очевидности наличия зависимостей. И в минимизации ответственности класса. Зачем ему знать о существовании чего-то, что ему не нужно?
Ответ написан
banderos120
@banderos120
Играю на балалайке
так ли действительно нужно быть независимым от контейнера?

Да. SOLID.

так ли действительно нужно быть независимым от контейнера?

Нет, если это необходимо, и обусловлено спецификой задачи, контейнер - это тот же класс.

По сути, если конструктор большой - это ничего страшного, в принципе, если все по делу, но это и первый сигнал о проблемах в архитектуре.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы