Magento Magento2 fabrika desen avantajları 1


15

Magento 2, enjekte edilemeyen maddeler için fabrika sınıflarını kullanıyor.

Örneğin ürün sınıfı: ProductFactory
Örneğin müşteri sınıfı:CustomerFactory

Burada fabrika modelinin türü nedir anlamıyorum ?

Çünkü 1 fabrika sınıfı ile ilişkili her sınıf için. Yinelenen bir şey olduğunu düşünüyorum. Neden için soyut fabrika oluşturmamalıdır CustomerFactory, ProductFactoryvs?

ve ayrıca örneğin:

Biz geçebilir AbstractFactorytür denetleme için yerine ProductFactoryde ProductRepositorysınıf yapıcısı.

Böylece ProductRepositoryve arasındaki sıkı bağlantıyı önleyebiliriz.ProductFactory


Soyut fabrika sınıfı:

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);
    }
}

Soyut Fabrika uygulaması:

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;
    }

}

Nesne yöneticisi ve fabrika arasındaki ilişki nedir?

Çok fazla zincirleme nesne var:

  • Örneğin ProductRepository(burada istemci olarak adlandırabiliriz) Productnesne gerektirir .

  • Bunun için belirli bir ProductFactorynesneye bağlıdır .

  • ProductFactorynesne, nesneye bağlıdır ObjectManager.

  • ObjectManagernesne Fabrika Nesnesine bağlıdır (burada Developer Object).

Elbette gevşek bağlantı için Arayüzler kullanıyorlar. Hala gerçekten kafa karıştırıcı akış.

Birisi Magento 2 fabrika deseniyle ve ayrıca Magento 1'den nasıl farklı olduğu konusunda derin avantajlar sağlayabilir misiniz?

Yanıtlar:


8

Hatırlanması gereken bir şey, SADECE BİR KENDİNİZİ TANIMLAMADAN fabrika sınıflarını otomatik olarak oluşturmamızdır. Yani, fabrikada özel bir sihir yapmanız gerekiyorsa, bunu yapabilirsiniz. (Örneğin, bir örneğin her bir oluşumunu herhangi bir nedenle günlüğe kaydetmek istiyorsanız, fabrikayı kendiniz yazın ve otomatik olarak oluşturmayacağız.) Her şey için tek bir soyut fabrika sınıfı kullanırsak, bu işe yaramaz.

Ayrıca hata ayıklamada biraz yardımcı olabilir - gerçek sınıfı görebilir, kesme noktalarını ayarlayabilir, daha anlamlı yığın izleri vb.


küçük boşluk olabilir ... tip kontrolü için sadece soyut sınıf kullanmak istiyorum ... ama geçerken ben sadece beton fabrika sınıfı geçmek istiyorum.
sivakumar

İlginç - Ben tersini düşünürdüm. Ben oluşturma () Müşteri dönecektir ipucu türü var bu yüzden CustomerFactory geçti istiyorum. AbstractFactory ile fabrikadan döndürülen nesnenin türünü çözmek için php Storm tipi ipucu kullanamıyorum. (Yoksa bir şey mi kaçırıyorum?)
Alan Kent

8

Burada yanlış olabilirim, ama bulduğum bir avantaj.
Otomatik üretilen fabrikalar, sihirli alıcılar veya ayarlayıcılara benzer.
Belirli bir varlığın örneği (buna BlogPost diyelim) oluşturulduğunda bir şey olmasını istediğinizi varsayalım. Diyelim ki bir alana varsayılan bir değer ayarlamak istiyorsunuz.
Örnek iyi olmayabilir ama beni dinleyin.
Soyut bir fabrika kullanırsanız, bunu değiştirmelisiniz ki örnekAdı 'BlogPost' parametresi olarak aldığınızda, setDatesomutlaştırdıktan sonra çağırırsınız .

Otomatik olarak oluşturulmuş fabrika kullanıyorsanız, daha sonra bu fabrikayı oluşturabilir, setterkodunuzu arayabilir , oluşturulan fabrikayı kaldırabilirsiniz ve çalışacaktır.
Sihirli ayarlayıcı ile yaptıklarınıza benzer. Yöntemi uyguluyorsunuz ve buna her yerde deniliyor.


Merhaba Marius. Yanıtınız için teşekkür ederiz. Sizinle irtibata geçin. Daha fazla bilgiye ihtiyacınız olacak.
sivakumar

@sivakumar. Ayrıca çekirdek ekip üyelerinden gelen bir yanıtı da isterim.
Marius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.