Мне было интересно, как правильно реализовать расширяемую модель EAV.
Я вижу Magento\Catalog\Model\Product
, что метод getExtensionAttributes()
реализован так:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Но в других, как модели клиентов или категории, это просто
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
что может привести к NULL- результату, если ключ extension_attributes не был установлен ранее.
Прагматично, я бы предпочел первый. Таким образом, я всегда могу получить экземпляр Magento\Framework\Api\ExtensionAttributesInterface
, даже если модель только что была создана.
Но почему тогда он не используется в других модулях? Это против нового разделения моделей данных, которое мы видим в модуле клиента? Если так, как мы должны инициализировать атрибуты расширения?