让我们说我正在建立一个玛蒙的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" />
.

但如果我需要,我很容易改变。

我什么时候应该在我的代码中使用类似的接口?
我创建了这个不完整的样本模块(对不起广告),我已经使用了这样的界面,但所有这些都来自核心。我没有创造我自己的一个。我应该吗?

有帮助吗?

解决方案

imho不是MAGE2特定问题,更普遍“何时使用接口”。这取决于您希望有人能够扩展您的扩展的地方。我会说出你与商业逻辑一起工作的任何地方,这可能会改变。;) 除了没有行为的对象(例如,简单的数据对象)通常不会改变。

如果您想要100%灵活,请以某种方式您必须在任何地方使用接口。但我不会过度创造它。我个人也喜欢 http://odetocode.com/博客/斯科特/ archive / 2009/06 / 08 / in-do-i-use-interfaces.aspx 当它实际上很有用时作为介绍。

许可以下: CC-BY-SA归因
scroll top