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, ProductFactoryecc.?
e anche per esempio:
Possiamo passare AbstractFactoryper il controllo del tipo invece che ProductFactorynel ProductRepositorycostruttore della classe.
Quindi possiamo evitare l'accoppiamento stretto tra ProductRepositoryeProductFactory
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) richiedeProductoggetto.Per questo dipende
ProductFactorydall'oggetto specifico .ProductFactoryl'oggetto dipendeObjectManagerdall'oggetto.ObjectManagerL'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?