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?
la source
Je peux me tromper ici, mais c'est un avantage que j'ai trouvé.
Les usines générées automatiquement sont quelque peu similaires aux getters ou setters magiques.
Supposons que vous souhaitiez que quelque chose se produise lorsqu'une instance d'une entité spécifique (appelons-la BlogPost) est créée. Supposons que vous souhaitiez définir une valeur par défaut pour un champ.
L'exemple n'est peut-être pas le meilleur, mais écoutez-moi.
Si vous utilisez une fabrique abstraite, vous devrez la modifier de sorte que lorsque vous recevez le nom d'instance en tant que paramètre «BlogPost», vous appelez
setDate
après l'instanciation.Si vous utilisez la fabrique autogénérée, vous pouvez plus tard créer cette fabrique, appeler le
setter
dans votre code, supprimer la fabrique générée et cela fonctionnera.Similaire à ce que vous faites avec le setter magique. Vous implémentez la méthode et elle est appelée partout.
la source