Fiquei me perguntando, qual é a maneira correta de implementar um modelo EAV extensível.
Vejo que Magento\Catalog\Model\Product
, em , o método getExtensionAttributes()
é implementado assim:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Mas em outros, como os modelos de cliente ou categoria, é apenas
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
o que pode levar a um resultado NULL , se a chave extension_attributes não tiver sido definida anteriormente.
Pragmaticamente, eu preferiria o primeiro. Dessa maneira, sempre posso ter certeza de obter uma instância Magento\Framework\Api\ExtensionAttributesInterface
, mesmo que o modelo tenha sido instanciado.
Mas por que não é usado em outros módulos então? É contra a nova separação de modelos de dados que vemos no módulo do cliente? Se sim, como devemos inicializar os atributos de extensão?