Angenommen, ich erstelle eine Magento 2-Erweiterung, die ... nun ja ... nicht wichtig ist. Sagen wir, es macht super tolle Sachen.
Aber ich möchte sicherstellen, dass dies mit den richtigen Standards erstellt wird, damit andere Entwickler es erweitern können.
Wann sollte ich die DI in Kombination mit Schnittstellen verwenden und wann nicht?
Um es klar zu machen, hier ist ein Kernbeispiel.
Die Klasse Magento\Core\Helper\Data
hat einen Konstruktor wie diesen:
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;
}
Meine Frage konzentriert sich auf den var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
(ich weiß, dass es andere im selben Konstruktor gibt, aber eine Erklärung wird für alle Fälle passen, die ich denke).
Nach dem di.xml
aus dem Kernmodul wird die var eine Instanz von Magento\Framework\App\Config
:
<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
aber ich kann das leicht ändern, wenn ich brauche.
Wann sollte ich solche Schnittstellen in meinem Code verwenden?
Ich habe dieses unvollständige Beispielmodul erstellt (Entschuldigung für die Werbung), in dem ich solche Schnittstellen verwendet habe, aber alle kommen aus dem Kern. Ich habe keine eigene erstellt. Sollte ich?