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?
sumber
Saya mungkin salah di sini, tetapi ini adalah keuntungan yang saya temukan.
Pabrik-pabrik yang dihasilkan secara otomatis mirip dengan getter atau setter ajaib.
Katakanlah Anda menginginkan sesuatu terjadi ketika sebuah instance dari entitas tertentu (sebut saja BlogPost) dibuat. Katakanlah Anda ingin menetapkan nilai default ke bidang.
Contohnya mungkin bukan yang terbaik tetapi dengarkan aku.
Jika Anda menggunakan pabrik abstrak, Anda harus memodifikasinya sehingga ketika Anda menerima instanceName sebagai parameter 'BlogPost' yang Anda panggil
setDate
setelah instantiating.Jika Anda menggunakan pabrik yang dibuat secara otomatis, Anda kemudian dapat membuat pabrik itu, memanggil
setter
kode Anda, menghapus pabrik yang dihasilkan dan itu akan bekerja.Mirip dengan apa yang Anda lakukan dengan setter ajaib. Anda menerapkan metode dan itu disebut di mana-mana.
sumber