Soy consciente de que Magento 2 introdujo modelos de datos como parte de la arquitectura del contrato de servicio. Los modelos de datos generalmente implementan interfaces definidas en Api / Data / de un módulo.
Pero, Magento parece haber conservado los viejos modelos también.
Tomemos un ejemplo de módulo-cliente.
- Interfaz del modelo de datos definida en Api / Data / CustomerInterface.php
- La interfaz anterior se implementa en Model / Data / Customer.php
- El modelo de datos tiene todas las funciones getter y setter para las variables del cliente, como cabría esperar.
- Además de lo anterior, también hay un Model / Customer.php. Esto también tiene la función getter y setter. Esto se parece más a un modelo de Magento 1 que se conecta al ResourceModel (Model / ResourceModel / Customer.php)
- En Model / ResourceModel / CustomerRepository.php, varias funciones recopilan datos del modelo Magnento 1, los transfieren al modelo de datos y luego devuelven el modelo de datos.
¿Por qué se necesita el viejo modelo? ¿Por qué el modelo de datos no puede conectarse directamente con ResourceModel?
\Magento\Customer\Api\Data\CustomerInterface
están expuestos para la API REST / SOAP (si está habilitada). Sin embargo, no necesita un modelo de datos para seleccionar qué métodos están expuestos, ya que simplemente puede conectar la interfaz al modelo 'real'. Así se hace\Magento\Catalog\Model\Product
y\Magento\Catalog\Api\Data\ProductInterface