Trong Quy tắc sử dụng phép nội xạ phụ thuộc , trạng thái devdocs Magento 2:
Các đối tượng mới có thể không giữ tham chiếu trường đến một đối tượng có thể tiêm và cũng không nên yêu cầu một đối tượng trong hàm tạo của chúng. Đây là một luật của Demeter vi phạm.
Tôi hiểu rằng đây là một mục tiêu tốt để có, nhưng làm thế nào điều này thực sự có thể với các mô hình Magento 2?
Nếu chúng ta nhìn vào mô-đun Khách hàng, được trình bày như một ví dụ sáng chói cho kiến trúc mới, chữ ký của nhà xây dựng mô hình khách hàng trông như thế này:
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Eav\Model\Config $config,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Customer\Model\ResourceModel\Customer $resource,
\Magento\Customer\Model\Config\Share $configShare,
\Magento\Customer\Model\AddressFactory $addressFactory,
\Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressesFactory,
\Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
GroupRepositoryInterface $groupRepository,
\Magento\Framework\Encryption\EncryptorInterface $encryptor,
\Magento\Framework\Stdlib\DateTime $dateTime,
CustomerInterfaceFactory $customerDataFactory,
DataObjectProcessor $dataObjectProcessor,
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
\Magento\Customer\Api\CustomerMetadataInterface $metadataService,
\Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
)
Và Magento\Framework\Model\Context
một mình, được sử dụng bởi tất cả các mô hình, có năm đối số có thể tiêm được .
Rõ ràng mô hình, mặc dù newable , không phải là một tấm gương tốt ở tất cả cho quy tắc này.
Tôi muốn tuân theo các thực tiễn tốt nhất với các lớp của riêng tôi (thậm chí không phải mô hình), nhưng tôi cần quyền truy cập vào những thứ như kho lưu trữ của các thực thể liên quan hoặc cho người quản lý sự kiện. Điều gì sẽ là cách ưa thích để xử lý việc này mà không vi phạm quy tắc từ trên?
Tôi hiện đang có xu hướng bỏ qua nó hoặc tốt nhất xem nó là hướng dẫn thân thiện, không phải là một quy tắc.