Допустим, я создаю расширение для 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" />
но я могу легко изменить это, если мне нужно.
Когда я должен использовать такие интерфейсы в своем коде?
Я создал этот неполный пример модуля (извините за рекламу), где я использовал такие интерфейсы, но все они исходят из ядра. Я не создал свой собственный. Нужно ли мне?