gpt4 book ai didi

symfony - Symfony2 中的依赖注入(inject)最佳实践

转载 作者:行者123 更新时间:2023-12-01 09:47:16 25 4
gpt4 key购买 nike

在 Symfony2(本例中为 2.8)中,将服务注入(inject)另一个服务时什么被认为是最佳实践?

/**
* Checker constructor.
* @param EntityManager $em
* @param EventDispatcherInterface $dispatcher
*/
public function __construct(EntityManager $em, EventDispatcherInterface $dispatcher)
{
$this->repoUser = $em->getRepository(User::class);
$this->repoPurchase = $em->getRepository(Purchase::class);
$this->repoTicket = $em->getRepository(Ticket::class);
$this->dispatcher = $dispatcher;
}

/**
* Checker constructor.
* @param UserRepository $ur
* @param PurchaseRepository $pr
* @param TicketRepository $tr
* @param EventDispatcherInterface $dispatcher
*/
public function __construct(UserRepository $ur, PurchaseRepository $pr, TicketRepository $tr, EventDispatcherInterface $dispatcher)
{
$this->repoUser = $ur;
$this->repoPurchase = $pr;
$this->repoTicket = $tr;
$this->dispatcher = $dispatcher;
}

或者显式使用 setter 并在 services.yml 中分别为它们设置参数?

我也想知道等式的性能部分是什么。

最佳答案

两种情况各有利弊。

  • 性能而言,这两个选项是相同的,因为您只有在请求服务实例时才会获得存储库实例。不管你手动做,还是由 DI 自动完成。如前所述here ,

    The container is lazy: it doesn't instantiate a service until (and unless) you ask for it.

  • 如果您打算用单元测试 覆盖您的服务 - 那么选项 2 肯定更好,因为您不需要在测试开始。

  • individual setters 的好处 - 也与单元测试有关。例如,对于一个测试用例,您只需要一个依赖项,对于另一个测试用例 - 另一个依赖项。因此,您可以在测试中使用 setter 来设置 mock,而无需将所有 mock 都传递给构造函数。

关于symfony - Symfony2 中的依赖注入(inject)最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com