In questo momento sono infastidito di scrivere costruttori simili in massa come i seguenti nei miei moduli.
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 */
}
In molti molti casi ho bisogno di istanze delle stesse classi in tutto il mio modulo.
Quindi mi chiedevo se sarebbe stato un modo accettabile di usare una o due classi helper centrali, che forniscono le classi necessarie, invece di definirle in ogni singolo costruttore.
Questo significa uno schema come questo:
Classe di aiuto
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;
}
}
Il costruttore più corto
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 */
}
A questo punto non sono sicuro di dover affrontare grossi svantaggi in futuro causati da questa struttura. Sarebbe un modo accettabile per ridurre la quantità di definizioni DI?