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?
quelle
Ich kann mich hier irren, aber das ist ein Vorteil, den ich gefunden habe.
Die automatisch generierten Fabriken ähneln den magischen Gettern oder Setzern.
Angenommen, Sie möchten, dass etwas passiert, wenn eine Instanz einer bestimmten Entität (nennen wir es BlogPost) erstellt wird. Angenommen, Sie möchten einen Standardwert für ein Feld festlegen.
Das Beispiel ist vielleicht nicht das beste, aber höre mich an.
Wenn Sie eine abstrakte Factory verwenden, müssen Sie diese so ändern, dass Sie sie
setDate
nach der Instanziierung aufrufen, wenn Sie den Instanznamen als Parameter 'BlogPost' erhalten .Wenn Sie eine automatisch
setter
generierte Factory verwenden, können Sie diese Factory später erstellen, den Code in Ihrem Code aufrufen , die generierte Factory entfernen und sie wird funktionieren.Ähnlich wie mit dem Zaubersetzer. Sie implementieren die Methode und sie wird überall aufgerufen.
quelle