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Об'єкт залежить від заводського об'єкта (тутDeveloper Object).
Звичайно, вони використовують інтерфейси для вільної зв'язку. Все ще дійсно заплутаний потік.
Чи можете ви комусь надати поглиблені переваги із заводською схемою Magento 2, а також чим вона відрізняється від Magento 1?