Magento 2 đang sử dụng các lớp học cho các nhà máy không tiêm.
Ví dụ lớp sản phẩm: ProductFactory
Ví dụ lớp khách hàng:CustomerFactory
Tôi không hiểu kiểu nhà máy ở đây là gì?
Bởi vì đối với mỗi lớp liên kết với 1 lớp nhà máy. Tôi đang nghĩ một cái gì đó trùng lặp.
Tại sao chúng ta không nên tạo nhà máy trừu tượng cho CustomerFactory
, ProductFactory
vv?
và cũng ví dụ:
Chúng ta có thể vượt qua AbstractFactory
để kiểm tra kiểu thay vì ProductFactory
trong ProductRepository
lớp xây dựng.
Vì vậy, chúng ta có thể tránh khớp nối chặt chẽ giữa ProductRepository
vàProductFactory
Lớp nhà máy trừu tượng:
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);
}
}
Tóm tắt Nhà máy thực hiện:
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;
}
}
Mối quan hệ giữa người quản lý đối tượng và nhà máy là gì?
Có rất nhiều đối tượng xích:
Ví dụ
ProductRepository
(ở đây chúng ta có thể gọi nó là client) yêu cầuProduct
đối tượng.Đối với điều này, nó phụ thuộc vào
ProductFactory
đối tượng cụ thể .ProductFactory
đối tượng phụ thuộc vàoObjectManager
đối tượng.ObjectManager
đối tượng phụ thuộc vào đối tượng Factory (ở đâyDeveloper Object
).
Dĩ nhiên họ đang sử dụng Giao diện cho khớp nối lỏng lẻo. Vẫn thực sự khó hiểu.
Bạn có thể cho ai đó những lợi thế sâu sắc với mẫu nhà máy Magento 2 & cũng như nó khác với Magento 1 như thế nào không?