В настоящее время меня раздражает написание подобных конструкторов в массовом порядке, как следующие в моих модулях.
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 */
}
Во многих, многих случаях мне нужны экземпляры одинаковых классов по всему модулю.
Поэтому я спрашивал себя, будет ли приемлемым способом использовать один или два центральных вспомогательных класса, которые предоставляют необходимые классы, вместо определения их в каждом конструкторе.
Это означает, что шаблон такой:
Хелпер Класс
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;
}
}
Короче конструктор
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 */
}
На данный момент я не уверен, придется ли мне в будущем иметь дело с большими недостатками, вызванными этой структурой. Будет ли это приемлемым способом уменьшить количество определений DI?