Me preguntaba, ¿cuál es la forma correcta de implementar un modelo EAV extensible?
Veo que en Magento\Catalog\Model\Product
, el método getExtensionAttributes()
se implementa así:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Pero en otros, como el cliente o los modelos de categoría, es solo
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
que puede conducir a un resultado NULL , si la clave extension_attributes no se ha establecido antes.
Pragmáticamente, preferiría el primero. De esta manera, siempre puedo estar seguro de obtener una instancia Magento\Framework\Api\ExtensionAttributesInterface
, incluso si el modelo acaba de ser instanciado.
Pero, ¿por qué no se usa en otros módulos entonces? ¿Va en contra de la nueva separación de modelos de datos que vemos en el módulo del cliente? Si es así, ¿cómo se supone que inicialicemos los atributos de extensión?