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, ProductFactoryetc.?
et aussi par exemple:
Nous pouvons passer AbstractFactorypour le type de vérification au lieu de ProductFactorydans le ProductRepositoryconstructeur de classe.
Nous pouvons donc éviter un couplage étroit entre ProductRepositoryetProductFactory
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 unProductobjet.Pour cela, cela dépend de l'
ProductFactoryobjet spécifique .ProductFactoryl'objet dépend de l'ObjectManagerobjet.ObjectManagerl'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?