Magento 2: Değişmez Durumda Veri Nesneleri mi Oluşturuyorsunuz?


9

Kapalı sıkı sıkıya başka Magento 2'de bir yorum

Hesaplanmış bir değer paylaşmanız gerekiyorsa, hesaplama davranışını nesneye ayırın ve bu değeri gerektiren bloklardan çağırın. Kayıt defteri önerilmez çünkü küresel değişebilir durumdur ve oradan ne alacağınızdan asla emin olamazsınız.

Magento 2'de değişmez durumdaki bir Nesne yaratmanın bir yolu var mı? Kayıt (kullanma Magento\Framework\Registrynedeniyle önerilmez) küresel değişken devlet var (her ne kadar, tahminen çünkü registeryöntemi varolan bir anahtarı değiştirmesine izin vermez, sen yapabilirsiniz Ayarını iptal etmek ve daha sonra bu anahtarı reset).

Ancak - Magento 2 herhangi bir nesne için aynı sorun var. Bir nesne oluşturmak olsaydım

namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;

class ViewVars extends DataObject
{
}

Daha sonra otomatik kurucu bağımlılığı enjeksiyonu herkesin bu paylaşılan nesneyi yakalamasını sağlar. Nesne paylaşılmazsa, görünüm / blok onu yakalayamaz.

Teorik olarak,

namespace Pulsestorm\Helloworld\Model;

class ViewVars
{
    protected $_data=false;
    protected function setData($data)
    {
        if($_data)
        {
            throw new Exception("Immutable");
        }
        $this->_data = $data;
    }

    public function getData()
    {
        return $this->_data;
    }
}

Ancak bu, bir görünüm için bireysel değişkenler ayarlamak kadar yaygın bir görev için çok fazla iş gibi görünüyor . Magento 2'de farkında olmadığım değişmez veri nesneleri oluşturmak için daha iyi bir yol var mı?


Eski Büyücü Kayıt Defteri düzeni değeri değiştirilemez hale getirmez mi? IMHO bu bir lang yapısı olmalı. M2, HHVM ile uyumludur, bu nedenle bu yapıya umutsuzca ihtiyacınız varsa, değiştirilemez veri türleri sağlayan Hack'i benimseyebilirsiniz. Açıkçası bu hem jest hem de kafamın bu aslında bir şey olabilir jest gibi jest olarak söylenir.
philwinkle

1
Anton'un yorumunun daha fazla olduğunu düşünüyorum, bir kayıt defteri arabirimi kullanıyorsanız, aslında ne elde ettiğiniz hakkında hiçbir garanti yoktur. 'Tamam, burada \ My \ Model'i current_model kayıt defteri anahtarında saklayacağım ve gerektiği gibi kullanacağım' diyebilirsiniz. Ancak (1) hiçbir şey current_model'in \ My \ Model (ya da hiçbir şey) örneği olmadığını garanti etmez; ve (2) yürütme yolunun başka herhangi bir yerinde bu kayıt defteri anahtarını herhangi bir şekilde kullanabilir veya değiştirebilir. Bu büyük sorunlara neden olabilir. Bu durum verilerini korumak için bağımlılık enjeksiyonu ile tanımlı bir arayüz ve singleton kullanmak daha iyidir.
Ryan Hoerr

Ayarlayıcılı nesne değiştirilemez. Nesnede veri ayarlamak için yapıcı kullanın.
KAndy

Yanıtlar:


4

Hayır, şu anda Magento 2'de değişmez veri nesneleri oluşturmak için daha iyi bir yol yoktur. Bunu, örneğin nesilden getters ve arayüzden yapıcı ile oluşturabilirsiniz.

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.