Questions tagged «design-patterns»

1
Magento 2中的收藏历史吗?
我知道目前Magento 2(2.1.2)中的许多代码或多或少是从Magento 1移植的,并且将来很多代码将被等效代码替代。在这方面,我想知道Magento 2系列的未来。 让我解释: Magento 1: 在Magento 1中,我们习惯于获得这样的集合: $products = Mage::getModel('catalog/product')->getCollection(); 然后,我们可以对集合应用过滤器和其他操作: $products->addAttributeToFilter('price', ['gteq' => 10]); $products->addFieldToFilter('created_at', ['lt' => '2016-10-10']); $products->setPageSize(10); // ... etc ... 最后但并非最不重要的一点是,我们的集合将返回模型: foreach ($products as $product) { echo get_class($product); // Mage_Catalog_Model_Product } Magento 2: Magento添加了许多新的抽象层,实现了一种更可靠的工作方式。这意味着当我们想要实体列表时,我们从存储库中请求它: $productResults = $this->productRepository->getList($searchCriteria); 如果我们要应用过滤器,我们使用的一个组合SearchCriteriaBuilder,在FilterGroupBuilder中,FilterBuilder和SortOrderBuilder: $this->searchCriteriaBuilder->addSortOrder( $this->sortOrderBuilder ->setField('created_at') ->setAscendingDirection() ->create() ); …

2
Magento2工厂模式相对于Magento 1的优势
Magento 2对非注射剂使用工厂类。 例如产品类别:ProductFactory 例如客户类别:CustomerFactory 我不明白这里的工厂模式是什么? 因为对于与1个工厂类关联的每个类。我在想它有些重复。 为什么我们不应该创建抽象工厂CustomerFactory,ProductFactory等等? 并且例如: 我们可以通过AbstractFactory进行类型检查,而不是ProductFactory在ProductRepository类的构造函数。 因此我们可以避免ProductRepository和之间的紧密耦合ProductFactory 抽象工厂类: namespace Magento\Framework\ObjectManager\Code\Generator; /** * Abstract Factory class */ abstract class AbstractFactory { /** * Object Manager instance * * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager = null; /** * Instance name to create * * @var string */ protected $_instanceName …


1
Magento 2:创建具有不可变状态的数据对象?
整理另一个Magento 2中的评论 如果需要共享一些计算值,则将计算行为放在单独的对象中,并从需要该值的块中调用它。不建议使用注册表,因为它是全局可变状态,您永远不确定从那里会得到什么。 有没有办法在Magento 2中创建具有不变状态的对象?不建议使用注册表(Magento\Framework\Registry),因为它是全局可变的状态(大概是因为,尽管该register方法不允许您更改现有密钥,但是您可以取消设置然后重置该密钥)。 但是,Magento 2中的任何对象都存在相同的问题。如果要创建对象 namespace Pulsestorm\Helloworld\Model; use Magento\Framework\DataObject; class ViewVars extends DataObject { } 然后,自动构造函数依赖项注入可确保任何人都可以抓住该共享库。如果对象是未共享的,则视图/块无法抓取它。 从理论上讲,我们可以做类似的事情 namespace Pulsestorm\Helloworld\Model; class ViewVars { protected $_data=false; protected function setData($data) { if($_data) { throw new Exception("Immutable"); } $this->_data = $data; } public function getData() { return $this->_data; } } 但是,与为视图设置单个变量一样,这似乎是一项任务的很多工作。Magento 2中有更好的方法来创建我不知道的不可变数据对象吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.