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?