내가 Magento 2 확장을 만들고 있다고 가정 해 봅시다 ... 음 ... 중요하지는 않습니다. 그것이 매우 멋진 일을한다고 가정 해 봅시다.
그러나 다른 개발자가 표준을 확장 할 수 있도록 적절한 표준을 사용하여 빌드했는지 확인하고 싶습니다.
언제 인터페이스와 함께 DI를 사용해야합니까?
여기서 명확하게하는 것이 핵심 예입니다.
클래스 Magento\Core\Helper\Data
에는 다음과 같은 생성자가 있습니다.
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;
}
내 질문은 var에 중점을 둡니다 \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
(동일한 생성자에 다른 사람들이 있지만 하나의 설명이 내가 생각하는 모든 경우에 적합하다는 것을 알고 있습니다).
에 따르면 di.xml
핵심 모듈에서 VAR은의 인스턴스가 될 것입니다 Magento\Framework\App\Config
:
<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
하지만 필요한 경우 쉽게 변경할 수 있습니다.
코드에서 인터페이스를 언제 사용해야합니까? 이러한 인터페이스를 사용한
불완전한 샘플 모듈 (광고용으로 죄송합니다)을 만들었지 만 모두 핵심 요소입니다. 나는 내 자신의 것을 만들지 않았습니다. 내가해야합니까?