Magento 2 utilizza le classi di fabbrica per i non iniettabili.
Ad esempio classe di prodotto: ad ProductFactory
esempio classe cliente:CustomerFactory
Non capisco qual è il tipo di modello di fabbrica qui?
Perché per ogni classe associata a 1 classe di fabbrica. Sto pensando che sia qualcosa di duplicato.
Perché non dovremmo creare una fabbrica astratta per CustomerFactory
, ProductFactory
ecc.?
e anche per esempio:
Possiamo passare AbstractFactory
per il controllo del tipo invece che ProductFactory
nel ProductRepository
costruttore della classe.
Quindi possiamo evitare l'accoppiamento stretto tra ProductRepository
eProductFactory
Classe di fabbrica astratta:
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);
}
}
Implementazione astratta della fabbrica:
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 è la relazione tra object manager e factory?
Ci sono così tanti oggetti concatenati:
Ad esempio
ProductRepository
(qui possiamo chiamarlo come client) richiedeProduct
oggetto.Per questo dipende
ProductFactory
dall'oggetto specifico .ProductFactory
l'oggetto dipendeObjectManager
dall'oggetto.ObjectManager
L'oggetto dipende dall'oggetto Factory (quiDeveloper Object
).
Ovviamente usano le interfacce per un accoppiamento lento. Flusso ancora molto confuso.
Qualcuno può dare profondi vantaggi con il modello di fabbrica Magento 2 e anche in che modo differisce da Magento 1?