Diciamo che sto costruendo un'estensione Magento 2 che fa ... beh ... non è importante. Diciamo che fa cose super fantastiche.
Ma voglio assicurarmi che questo sia costruito usando gli standard adeguati in modo che altri sviluppatori possano estenderlo.
Quando dovrei usare il DI in combinazione con le interfacce e quando non dovrei?
Per chiarire qui è un esempio fondamentale.
La classe Magento\Core\Helper\Data
ha un costruttore come questo:
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;
}
La mia domanda è focalizzata sul var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
(so che ce ne sono altri nello stesso costruttore, ma una spiegazione si adatta a tutti i casi che penso).
Secondo il di.xml
modulo dal core, var sarà un'istanza di Magento\Framework\App\Config
:
<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
ma posso facilmente cambiarlo se ne ho bisogno.
Quando dovrei usare interfacce del genere nel mio codice?
Ho creato questo modulo di esempio incompleto (mi dispiace per la pubblicità), dove ho usato tali interfacce, ma tutte provengono dal nucleo. Non ne ho creato uno mio. Dovrei?