Magento 2 używa klas fabrycznych dla produktów nie do wstrzykiwania.
Na przykład klasa produktu: ProductFactory
Na przykład klasa klienta:CustomerFactory
Nie rozumiem, jaki jest tutaj typ wzoru fabrycznego ?
Ponieważ dla każdej klasy powiązanej z 1 klasą fabryczną. Myślę, że to coś duplikatu.
Dlaczego nie powinniśmy tworzyć abstrakcyjne fabrykę CustomerFactory
, ProductFactory
etc?
a także na przykład:
Możemy przejść AbstractFactory
do sprawdzenia typu zamiast ProductFactory
w ProductRepository
konstruktorze klasy.
Możemy więc uniknąć ścisłego połączenia między ProductRepository
iProductFactory
Klasa abstrakcyjna fabryki:
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);
}
}
Implementacja fabryki abstrakcyjnej:
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;
}
}
Jaki jest związek między menedżerem obiektów a fabryką?
Jest tyle łańcuchów przedmiotów:
Na przykład
ProductRepository
(tutaj możemy to nazwać klientem) wymagaProduct
obiektu.Zależy to od konkretnego
ProductFactory
obiektu.ProductFactory
obiekt zależy odObjectManager
obiektu.ObjectManager
obiekt zależy od obiektu fabrycznego (tutajDeveloper Object
).
Oczywiście używają interfejsów do luźnego łączenia. Wciąż bardzo mylący przepływ.
Czy ktoś może dać dogłębne korzyści z fabrycznym wzorem Magento 2, a także czym różni się od Magento 1?