Magento 2 utilise des classes d'usine pour les non injectables.
Par exemple classe de produit: ProductFactory
Par exemple classe de client:CustomerFactory
Je ne comprends pas quel est le type de modèle d'usine ici?
Parce que pour chaque classe associée à 1 classe d'usine. Je pense que c'est quelque chose en double.
Pourquoi ne devrions-nous pas créer une fabrique abstraite pour CustomerFactory
, ProductFactory
etc.?
et aussi par exemple:
Nous pouvons passer AbstractFactory
pour le type de vérification au lieu de ProductFactory
dans le ProductRepository
constructeur de classe.
Nous pouvons donc éviter un couplage étroit entre ProductRepository
etProductFactory
Classe abstraite d'usine:
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);
}
}
Implémentation de Abstract Factory:
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;
}
}
Quelle est la relation entre le gestionnaire d'objets et l'usine?
Il y a tellement de chaînage d'objets:
Par exemple
ProductRepository
(ici nous pouvons l'appeler en tant que client) nécessite unProduct
objet.Pour cela, cela dépend de l'
ProductFactory
objet spécifique .ProductFactory
l'objet dépend de l'ObjectManager
objet.ObjectManager
l'objet dépend de l'objet d'usine (iciDeveloper Object
).
Bien sûr, ils utilisent des interfaces pour un couplage lâche. Flux toujours très déroutant.
Pouvez-vous quelqu'un donner des avantages en profondeur avec le modèle d'usine de Magento 2 et aussi comment il diffère de Magento 1?