Magento 2 menggunakan kelas pabrik untuk non-injeksi.
Misalnya kelas produk: ProductFactory
Misalnya kelas pelanggan:CustomerFactory
Saya tidak mengerti apa jenis pola pabrik di sini?
Karena untuk setiap kelas terkait dengan 1 kelas pabrik. Saya pikir ini duplikat.
Kenapa kita tidak membuat pabrik abstrak untuk CustomerFactory
, ProductFactory
dll?
dan juga misalnya:
Kami bisa lulus AbstractFactory
untuk memeriksa jenis bukan ProductFactory
di ProductRepository
kelas konstruktor.
Jadi kita bisa menghindari kopling ketat antara ProductRepository
danProductFactory
Kelas pabrik abstrak:
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);
}
}
Abstrak Implementasi pabrik:
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;
}
}
Apa hubungan antara manajer objek dan pabrik?
Ada banyak objek chaining:
Misalnya
ProductRepository
(di sini kita bisa menyebutnya sebagai klien) membutuhkanProduct
objek.Untuk ini tergantung pada
ProductFactory
objek tertentu .ProductFactory
objek tergantung padaObjectManager
objek.ObjectManager
objek tergantung pada Obyek Pabrik (di siniDeveloper Object
).
Tentu saja mereka menggunakan antarmuka untuk kopling longgar. Alurnya masih sangat membingungkan.
Dapatkah Anda memberi seseorang keuntungan mendalam dengan pola pabrik Magento 2 & juga bagaimana perbedaannya dari Magento 1?