Magento 2 está usando classes de fábrica para não injetáveis.
Por exemplo classe de produto: ProductFactory
Por exemplo classe de cliente:CustomerFactory
Não entendo qual é o tipo de padrão de fábrica aqui?
Porque para cada classe associada a 1 classe de fábrica. Estou pensando que é algo duplicado.
Por que não deveríamos criar fábrica abstrata para CustomerFactory
, ProductFactory
etc?
e também por exemplo:
Podemos passar AbstractFactory
pela verificação de tipo em vez de ProductFactory
no ProductRepository
construtor de classe.
Para evitar o acoplamento apertado entre ProductRepository
eProductFactory
Classe de fábrica abstrata:
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 = null;
/**
* Create class instance with specified parameters
*
* @param array $data
* @return \Magento\Catalog\Model\Product
*/
public function create(array $data = array())
{
return $this->_objectManager->create($this->_instanceName, $data);
}
}
Resumo Implementação de fábrica:
namespace Magento\Catalog\Model;
use Magento\Framework\ObjectManager\Code\Generator\AbstractFactory;
/**
* Factory class for @see \Magento\Catalog\Model\Product
*/
class ProductFactory extends AbstractFactory
{
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = '\\Magento\\Catalog\\Model\\Product')
{
$this->_objectManager = $objectManager;
$this->_instanceName = $instanceName;
}
}
Qual é a relação entre o gerenciador de objetos e a fábrica?
Há muitos objetos encadeados:
Por exemplo
ProductRepository
(aqui podemos chamá-lo como cliente) requerProduct
objeto.Para isso, depende de
ProductFactory
objeto específico .ProductFactory
objeto depende doObjectManager
objeto.ObjectManager
objeto depende do objeto de fábrica (aquiDeveloper Object
).
É claro que eles estão usando interfaces para acoplamentos soltos. Fluxo ainda muito confuso.
Você pode dar vantagens detalhadas com o padrão de fábrica do Magento 2 e também como ele difere do Magento 1?