Magento 2: ¿cuáles son los beneficios de usar contratos de servicio?

15

Como algunos de ustedes saben, la forma recomendada de Magento 2 de manejar modelos / colecciones para acciones CRUD es usar contratos de servicio.

Pero aún así, según las preguntas y respuestas de Magento SE, parece que la mayoría de las personas tienden a usar el modelo / modelo de recurso / colección directamente en su lugar.

Como ejemplo para cargar una cotización, puedo hacerlo directamente a través de la fábrica de esta manera:

$this->quoteFactory->create()->load($quoteId);

¿Dónde $this->quoteFactoryestá una instancia de\Magento\Quote\Model\QuoteFactory

Pero también puedo hacerlo a través de un contrato de servicio como este:

$this->quoteRepository->get($quoteId);

¿Dónde $this->quoteRepositoryestá una instancia de\Magento\Quote\Api\CartRepositoryInterface

Entonces, mi pregunta es ¿cuáles son los beneficios de usar contratos de servicio en lugar de fábricas?

Raphael en Digital Pianism
fuente

Respuestas:

18

Ventajas de usar contratos de servicio, (según el entendimiento de magento 2)

Los contratos de servicio tienen una serie de funciones importantes para magento 2, como:

  • La actualización del módulo se vuelve fácil.

  • Simplifique las personalizaciones al módulo sin profundizar en los archivos principales.

  • Reduzca el conflicto entre módulos en el sistema.

  • La actualización de Magento es más segura utilizando un contrato de servicio

  • Los servicios se mantendrán sin cambios dentro de las nuevas versiones del mismo, por lo que la actualización en el futuro es fácil para el módulo existente.

  • Para modelos / colecciones, este caso no es cierto en las nuevas versiones.
Rakesh Jesadiya
fuente
2

Beneficios del contrato de servicio:

  • Mejora la modularidad de Magento

  • Asegure una API bien definida y duradera que otros módulos y extensiones de terceros puedan implementar

  • Facilite la configuración de servicios como API web.

  • Las entidades de datos revelan un modelo de datos más simple que el modelo de datos en un esquema de base de datos relacional subyacente

  • Utilice diferentes tecnologías de almacenamiento para diferentes recopilaciones de datos.

Jameslj
fuente
2

Creo que el mayor beneficio es que los módulos pueden determinar qué funcionalidad pueden usar otros módulos. En Magento 1, tenía ayudantes que a menudo se usaban mal para este propósito (pero eso es un tema completamente diferente), pero en Magento 2 su módulo puede proporcionar funcionalidad a otros módulos (por ejemplo, por desarrolladores de terceros) y separarlo y -contenido.

Dependency Injection proporciona un sistema en el que puede utilizar una interfaz en su construcción para que solo tenga acceso a esos métodos públicos.

Algunos ejemplos:

¿Quiere vincular un producto a múltiples categorías? Uso \Magento\Catalog\Api\CategoryLinkManagementInterface:

$this->categoryLinkManagement->assignProductToCategories(
    $sku,
    $categoryIds
);

¿Quiere aumentar la cantidad de existencias de un producto? Uso Magento\CatalogInventory\Api\StockManagementInterface:

$this->stockManagement->backItemQty(
    $productId,
    $itemsToReceive
);

Estos dos ejemplos muestran perfectamente el uso adecuado de los contratos de servicio. Además de eso, proporcionan una interfaz uniforme para comunicarse con:

  • Otros módulos (como se describió anteriormente)
  • Comandos de consola
  • Llamadas API
  • etc.
Giel Berkers
fuente