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?
źródło
Mogę się tutaj mylić, ale znalazłem zaletę.
Fabryki generowane automatycznie są podobne do magicznych pobieraczy lub seterów.
Załóżmy, że chcesz, aby coś się wydarzyło, gdy zostanie utworzona instancja określonej encji (nazwijmy ją BlogPost). Powiedzmy, że chcesz ustawić wartość domyślną w polu.
Przykład może nie być najlepszy, ale wysłuchaj mnie.
Jeśli korzystasz z fabryki abstrakcyjnej, musisz ją zmodyfikować, aby po otrzymaniu instancji jako parametru „BlogPost” wywoływałeś ją
setDate
po utworzeniu instancji.Jeśli używasz automatycznie generowanej fabryki, możesz później utworzyć tę fabrykę, wywołać
setter
kod i usunąć wygenerowaną fabrykę, a ona zadziała.Podobne do tego, co robisz za pomocą magicznego setera. Wdrażasz metodę, która jest wywoływana wszędzie.
źródło