Мне известно, что Magento 2 представил модели данных как часть архитектуры контракта на обслуживание. Модели данных обычно реализуют интерфейсы, определенные в Api / Data / модуля.
Но Magento, похоже, сохранил и старые модели.
Давайте рассмотрим пример для модуля-клиента.
- Интерфейс модели данных, определенный в Api / Data / CustomerInterface.php
- Данный интерфейс реализован в Model / Data / Customer.php
- Модель данных имеет все функции получения и установки переменных клиента, как и следовало ожидать
- В дополнение к вышесказанному есть также Model / Customer.php. Это также имеет функции получения и установки. Это больше похоже на модель Magento 1, которая подключается к ResourceModel (Model / ResourceModel / Customer.php)
- В Model / ResourceModel / CustomerRepository.php различные функции собирают данные из модели Magnento 1, переносят их в модель данных и затем возвращают модель данных.
Зачем нужна старая модель? Почему модель данных не может напрямую соединяться с ResourceModel?
\Magento\Customer\Api\Data\CustomerInterface
доступны для API REST / SOAP (если включено). Однако вам не нужна модель данных, чтобы выбрать, какие методы будут представлены, поскольку вместо этого вы можете просто подключить интерфейс к «реальной» модели. Вот как это делается с\Magento\Catalog\Model\Product
и\Magento\Catalog\Api\Data\ProductInterface