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?