Magento 2 использует фабричные классы для неинъекционных препаратов.
Например, класс продукта: ProductFactory
Например, класс клиента:CustomerFactory
Я не понимаю, какой тип фабричной модели здесь?
Потому что для каждого класса связан 1 фабричный класс. Я думаю, что-то дублирует.
Почему мы не должны создавать абстрактные фабрики CustomerFactoryи ProductFactoryт. Д.?
а также например:
Мы можем передать AbstractFactoryдля проверки типа вместо ProductFactoryв ProductRepositoryконструкторе класса.
Таким образом , мы можем избежать тесной связи между ProductRepositoryиProductFactory
Абстрактный Фабричный класс:
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);
}
}
Реализация фабрики:
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;
}
}
Какова связь между менеджером объектов и фабрикой?
Существует так много цепочек объектов:
Например
ProductRepository(здесь мы можем назвать его клиентом) требуетсяProductобъект.Это зависит от конкретного
ProductFactoryобъекта.ProductFactoryобъект зависит отObjectManagerобъекта.ObjectManagerобъект зависит от объекта Factory (здесьDeveloper Object).
Конечно, они используют интерфейсы для слабой связи. Все еще действительно запутанный поток.
Можете ли вы дать кому-то всестороннее преимущество с заводским шаблоном Magento 2, а также чем он отличается от Magento 1?