Magento 2 กำลังใช้คลาสของโรงงานเพื่อไม่ให้ฉีดยา
ตัวอย่างเช่นระดับผลิตภัณฑ์: ProductFactory
ตัวอย่างเช่นชั้นลูกค้า:CustomerFactory
ฉันไม่เข้าใจรูปแบบของโรงงานที่นี่คืออะไร
เพราะสำหรับแต่ละคลาสที่เกี่ยวข้องกับ 1 คลาสจากโรงงาน ฉันคิดว่ามันเป็นสิ่งที่ซ้ำกัน
ทำไมเราจึงไม่ควรสร้างโรงงานนามธรรมCustomerFactory
, ProductFactory
etc?
และตัวอย่างเช่น:
เราสามารถส่งผ่าน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 ได้อย่างไร