A coda di rondine un commento in un altro Magento 2
Se è necessario condividere un valore calcolato, inserire il comportamento del calcolo per separare l'oggetto e chiamarlo dai blocchi che richiedono quel valore. Il registro è scoraggiato perché è uno stato mutabile globale e non si è mai sicuri di ciò che si otterrà da lì.
C'è un modo per creare un oggetto in Magento 2 con stato immutabile? L'uso del registro ( Magento\Framework\Registry
) è sconsigliato perché è uno stato mutabile globale (presumibile perché, sebbene il register
metodo non ti permetta di cambiare una chiave esistente, puoi disinserire e quindi resettare quella chiave).
Tuttavia, lo stesso problema esiste per qualsiasi oggetto in Magento 2. Se dovessi creare un oggetto
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Quindi l'iniezione automatica della dipendenza del costruttore garantisce che chiunque possa afferrare quell'oggetto condiviso. Se l'oggetto non è condiviso, la vista / blocco non può afferrarlo.
In teoria, potremmo fare qualcosa del genere
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;
}
}
Ma sembra un sacco di lavoro per un'attività tanto comune quanto l'impostazione di singole variabili per una vista . Esiste un modo migliore in Magento 2 per creare oggetti dati immutabili di cui non sono a conoscenza?