magento2中的设计模式--工厂模式factory,factories详解

magento2中使用了大量的设计模式,而工厂模式在magento2中的应用属于范围最广的一种设计模式,本文就为大家介绍一下magento2中的工厂设计模式。

工厂是创建其他类的类,很像对象管理器,只是这次我们被鼓励直接使用它们。

它们的目的是实例化不可注入的类——那些我们不应该直接注入到__construct中的类。

使用工厂的美妙之处在于,大多数时候,我们甚至不必编写它们,因为它们是由Magento自动生成的,

除非我们需要为工厂类实现某种特定的行为。通过在整个<MAGENTO_DIR>目录的*.php文件中查找Factory$字符串,

我们可以看到数千个工厂示例,分布在MAGENTO的大多数模块中。虽然这些工厂中有很多是实际存在的,

但其他工厂是在需要时自动生成的。让我们快速了解一个自动生成的工厂,即Magento\Newsletter\Model\SubscriberFactory,

它用于几个Magento模块,如新闻稿、订户和评论模块:

class SubscriberFactory {
    protected $_objectManager = null;
    protected $_instanceName = null;
    public function __construct(\Magento\ Framework\ ObjectManagerInterface $objectManager, 
    $instanceName = '\\Magento\\Newsletter\\Model\\Subscriber') {
        $this - > _objectManager = $objectManager;
        $this - > _instanceName = $instanceName;
    }
    public function create(array $data = array()) {
        return $this - > _objectManager - > create($this - > _instanceName, $data);
    }
}

自动生成的工厂代码本质上只是对象管理器创建方法之上的一个薄包装。

工厂与di.xml首选项机制配合良好,这意味着我们可以很容易地将接口传递到构造函数中,如下所示:

public function __construct(\Magento\ CatalogInventory\ Api\ StockItemRepositoryInterface $stockItemRepository, 
         \Magento\ CatalogInventory\ Api\ StockItemCriteriaInterfaceFactory $stockItemCriteriaFactory) {
        $this - > stockItemRepository = $stockItemRepository;
        $this - > stockItemCriteriaFactory = $stockItemCriteriaFactory;
    } // $criteria = $this->stockItemCriteriaFactory->create();// $result = $this->stockItemRepository->getList($criteria);

首选项机制确保在调用对象实例的构造函数时将具体实现传递给对象实例。

在开发人员模式下,Magento执行自动编译,这意味着对di.xml的更改将自动获取。

然而,有时,如果我们偶然发现意外的结果,运行bin/magento setup:di:compile控制台命令,

甚至手动清除生成的文件夹(rm-rf-generated/*)可能有助于解决问题。

以上内容来自于码小课:

码小课提供magento2开发的全栈教程,欢迎大家访问。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值