Мені було цікаво, який правильний спосіб втілити розширювану модель 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
, навіть якщо модель щойно була створена.
Але чому він тоді не використовується в інших модулях? Це проти нового роз'єднання моделей даних, яке ми бачимо в замовницькому модулі? Якщо так, то як ми повинні ініціалізувати атрибути розширення?