Katakanlah saya sedang membangun ekstensi Magento 2 yang tidak .... well ... tidak penting. Katakanlah itu melakukan hal-hal yang luar biasa.
Tapi saya ingin memastikan bahwa ini dibangun menggunakan standar yang tepat sehingga pengembang lain dapat memperpanjangnya.
Kapan saya harus menggunakan DI dalam kombinasi dengan antarmuka dan kapan saya seharusnya tidak?
Untuk membuatnya jelas di sini adalah contoh inti.
Kelas Magento\Core\Helper\Data
memiliki konstruktor seperti ini:
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;
}
Pertanyaan saya terfokus pada var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
(saya tahu ada orang lain di konstruktor yang sama, tetapi satu penjelasan akan cocok untuk semua kasus yang saya pikir).
Menurut di.xml
dari modul inti var akan menjadi turunan dari Magento\Framework\App\Config
:
<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
tetapi saya dapat dengan mudah mengubahnya jika perlu.
Kapan saya harus menggunakan antarmuka seperti itu dalam kode saya?
Saya telah membuat modul sampel yang tidak lengkap ini (maaf untuk iklan), tempat saya menggunakan antarmuka seperti itu, tetapi semuanya berasal dari inti. Saya belum membuat sendiri. Haruskah saya?