Magento 2 verwendet Factory-Klassen für nicht injizierbare Produkte.
Zum Beispiel Produktklasse: ProductFactory
Zum Beispiel Kundenklasse:CustomerFactory
Ich verstehe nicht, was hier für ein Fabrikmuster vorliegt .
Denn für jede Klasse mit 1 Werksklasse verbunden. Ich denke, es ist etwas doppeltes.
Warum sollen wir nicht abstraktes Werk schaffen CustomerFactory
, ProductFactory
etc?
und auch zum Beispiel:
Wir können AbstractFactory
zur Typprüfung anstatt ProductFactory
im ProductRepository
Klassenkonstruktor übergeben.
So können wir eine enge Kopplung zwischen ProductRepository
und vermeidenProductFactory
Abstrakte Factory-Klasse:
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);
}
}
Implementierung der 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;
}
}
Wie ist die Beziehung zwischen Objektmanager und Fabrik?
Es gibt so viel Verkettung von Objekten:
Zum Beispiel
ProductRepository
(hier können wir es als Client bezeichnen) erfordertProduct
Objekt.Dies hängt vom jeweiligen
ProductFactory
Objekt ab.ProductFactory
Objekt hängt vomObjectManager
Objekt ab.ObjectManager
Objekt hängt vom Factory-Objekt ab (hierDeveloper Object
).
Natürlich verwenden sie Schnittstellen für die lose Kopplung. Immer noch sehr verwirrend.
Kann Ihnen jemand detaillierte Vorteile mit Magento 2 Factory Pattern geben und auch, wie es sich von Magento 1 unterscheidet?