Tại thời điểm này, tôi cảm thấy khó chịu khi viết các hàm tạo tương tự như sau trong các mô-đun của mình.
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 */
}
Trong nhiều trường hợp, tôi cần các thể hiện của cùng một lớp trên mô-đun của mình.
Vì vậy, tôi đã tự đặt câu hỏi, liệu đó có phải là một cách chấp nhận được để sử dụng một hoặc hai lớp trợ giúp trung tâm, cung cấp các lớp cần thiết, thay vì định nghĩa chúng trong mỗi hàm tạo.
Điều này có nghĩa là một mô hình như thế này:
Lớp người trợ giúp
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;
}
}
Các constructor ngắn hơn
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 */
}
Tại thời điểm này tôi không chắc chắn liệu tôi sẽ phải đối phó với những bất lợi lớn trong tương lai do cấu trúc này gây ra hay không. Đây có phải là một cách chấp nhận được để giảm số lượng định nghĩa DI?