Mi chiedevo, qual è il modo giusto per implementare un modello EAV estensibile.
Vedo che in Magento\Catalog\Model\Product
, il metodo getExtensionAttributes()
è implementato in questo modo:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Ma in altri, come i modelli dei clienti o delle categorie, è giusto
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
che può portare a un risultato NULL , se la chiave extension_attributes non è stata impostata prima.
Pragmaticamente, preferirei il primo. In questo modo posso sempre essere sicuro di ottenere un'istanza di Magento\Framework\Api\ExtensionAttributesInterface
, anche se il modello è stato appena istanziato.
Ma allora perché non viene utilizzato in altri moduli? È contro la nuova separazione dei modelli di dati che vediamo nel modulo del cliente? In tal caso, come dovremmo inizializzare gli attributi dell'estensione?