No momento, estou incomodado de escrever construtores similares em massa, como os seguintes, em meus módulos.
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
/* ... */
\Foo\Bar\Model\Baz $baz,
/* ... */
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
$this->registry = $registry;
/* ... */
$this->baz = $baz;
/* ... */
/* some awesome stuff */
}
Em muitos casos, eu preciso de instâncias das mesmas classes em todo o meu módulo.
Então, eu estava me perguntando se seria uma maneira aceitável de usar uma ou duas classes auxiliares centrais, que fornecem as classes necessárias, em vez de defini-las em cada construtor.
Isso significa um padrão como este:
Classe auxiliar
namespace Foo\Bar\Helper
class Main
{
protected $baz;
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
/* ... */
\Foo\Bar\Model\Baz $baz,
/* ... */
) {
$this->registry = $registry;
/* ... */
$this->baz = $baz;
/* ... */
/* some awesome stuff */
}
public function getBazInstance()
{
return $this->baz;
}
}
O construtor mais curto
public function __construct(
\Foo\Bar\Helper\Main $mainHelper,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
$this->mainHelper = $mainHelper;
/* some awesome stuff */
}
Neste ponto, não tenho certeza se terei de lidar com grandes desvantagens no futuro causadas por essa estrutura. Seria uma maneira aceitável de reduzir a quantidade de definições de DI?