Zu diesem Zeitpunkt ärgere ich mich darüber, in meinen Modulen massenhaft ähnliche Konstruktoren wie die folgenden zu schreiben.
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 vielen, vielen Fällen benötige ich überall in meinem Modul Instanzen derselben Klassen.
Ich fragte mich also, ob es akzeptabel wäre, eine oder zwei zentrale Hilfsklassen zu verwenden, die die erforderlichen Klassen bereitstellen, anstatt sie in jedem einzelnen Konstruktor zu definieren.
Dies bedeutet ein Muster wie dieses:
Helferklasse
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;
}
}
Der kürzere Konstruktor
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 */
}
Zum jetzigen Zeitpunkt bin ich mir nicht sicher, ob ich mich in Zukunft mit großen Nachteilen aus dieser Struktur auseinandersetzen muss. Wäre dies ein akzeptabler Weg, um die Anzahl der DI-Definitionen zu reduzieren?