Giả sử tôi đang xây dựng một tiện ích mở rộng Magento 2 không .... à ... không quan trọng. Hãy nói rằng nó làm những thứ siêu tuyệt vời.
Nhưng tôi muốn chắc chắn rằng đây là bản dựng sử dụng các tiêu chuẩn phù hợp để các nhà phát triển khác có thể mở rộng nó.
Khi nào tôi nên sử dụng DI kết hợp với giao diện và khi nào tôi không nên?
Để làm cho nó rõ ràng ở đây là một ví dụ cốt lõi.
Lớp Magento\Core\Helper\Data
có một hàm tạo như thế này:
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\App\State $appState,
PriceCurrencyInterface $priceCurrency,
$dbCompatibleMode = true
) {
parent::__construct($context);
$this->_scopeConfig = $scopeConfig;
$this->_storeManager = $storeManager;
$this->_appState = $appState;
$this->_dbCompatibleMode = $dbCompatibleMode;
$this->_priceCurrency = $priceCurrency;
}
Câu hỏi của tôi tập trung vào var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
(tôi biết có những người khác trong cùng một hàm tạo, nhưng một lời giải thích sẽ phù hợp với tất cả các trường hợp tôi nghĩ).
Theo di.xml
mô-đun lõi, var sẽ là một thể hiện của Magento\Framework\App\Config
:
<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
nhưng tôi có thể dễ dàng thay đổi điều đó nếu tôi cần.
Khi nào tôi nên sử dụng các giao diện như thế trong mã của mình?
Tôi đã tạo mô-đun mẫu không hoàn chỉnh này (xin lỗi vì quảng cáo), nơi tôi đã sử dụng các giao diện như vậy, nhưng tất cả chúng đều đến từ cốt lõi. Tôi đã không tạo ra một trong những của riêng tôi. Tôi có nên