Pada saat ini saya kesal menulis konstruktor serupa secara massal seperti berikut dalam modul saya.
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 */
}
Dalam banyak banyak kasus saya membutuhkan instance dari kelas yang sama di seluruh modul saya.
Jadi saya bertanya pada diri sendiri, apakah itu akan menjadi cara yang dapat diterima untuk menggunakan satu atau dua kelas pembantu pusat, yang menyediakan kelas yang diperlukan, daripada mendefinisikan mereka di setiap konstruktor tunggal.
Ini berarti pola seperti ini:
Kelas Pembantu
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;
}
}
Konstruktor yang lebih pendek
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 */
}
Pada titik ini saya tidak yakin apakah saya harus berurusan dengan kerugian besar di masa depan yang disebabkan oleh struktur ini. Apakah ini akan menjadi cara yang dapat diterima untuk mengurangi jumlah definisi DI?