magento 2 di最佳实践
-
12-12-2019 - |
题
但我想确保这是使用正确标准构建的,所以其他开发人员可以扩展它。
我应该在与接口中的组合中使用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" />
但如果我需要,我很容易改变。
我什么时候应该在我的代码中使用类似的接口?
我创建了这个不完整的样本模块(对不起广告),我已经使用了这样的界面,但所有这些都来自核心。我没有创造我自己的一个。我应该吗?
解决方案
imho不是MAGE2特定问题,更普遍“何时使用接口”。这取决于您希望有人能够扩展您的扩展的地方。我会说出你与商业逻辑一起工作的任何地方,这可能会改变。;) 除了没有行为的对象(例如,简单的数据对象)通常不会改变。
如果您想要100%灵活,请以某种方式您必须在任何地方使用接口。但我不会过度创造它。我个人也喜欢 http://odetocode.com/博客/斯科特/ archive / 2009/06 / 08 / in-do-i-use-interfaces.aspx 当它实际上很有用时作为介绍。