Contexto del Proyecto
Un cliente necesitaba conectar su catálogo de Magento con AliExpress para ampliar canales de venta. Magento sirve como su plataforma B2C/B2B, mientras que AliExpress actúa como marketplace donde operan como Merchant/Seller. El objetivo era sincronizar productos de cada tienda Magento a AliExpress, permitiendo a los merchants gestionar su catálogo en Magento y exportarlo automáticamente a AliExpress.
Reto Técnico
En el papel parecía simple, pero surgieron desafíos del mundo real. AliExpress proporciona una API compleja, por lo que crearon un SDK como middleware para abstraer la comunicación con la API. Sin embargo, este SDK presentaba problemas críticos:
- • Sin definiciones claras de casos de uso: El SDK carecía de límites de negocio claros y casos de uso como puntos de entrada, forzando a los desarrolladores a luchar con interacciones de bajo nivel con la API
- • Sin empaquetado adecuado: El SDK era un archivo público descargado manualmente e incluido en el código fuente—sin autoloader, sin paquete Composer, sin estándares PSR. Esto requería trabajo de integración manual en nuestro módulo de Magento
Solución Arquitectónica
Decidimos construir nuestro propio SDK y usarlo como librería externa en el módulo de Magento. La arquitectura consistía en tres capas:
- • Librería SDK personalizada: Abstrae toda la comunicación con la API de AliExpress usando el patrón Mediator. Cada caso de uso está representado por un objeto que representa la intención (Use Case) y recibe un DTO (datos para POST/GET a la API de AliExpress). Esto permite llamar a casos de uso como si fueran APIs REST—recuerda, todo es una API
- • Módulo de Magento (capa de Casos de Uso): Define casos de uso para democratizar el uso de la API de AliExpress a nivel de aplicación. Este módulo usa indirección (a través del SDK) para interactuar con la API de AliExpress. Tiene dependencias mínimas de Magento y podría haber sido una librería PHP simple—solo define casos de uso con el SDK, convirtiéndolo en una API para la maquinaria
- • Módulo de Magento (capa de Infraestructura): Interactúa con el backoffice, más cercano a la infraestructura. Define configuraciones de Magento para credenciales de merchants, páginas del backoffice para visualizar y exportar productos a AliExpress, importar pedidos de AliExpress a Magento, y un Cron para sincronización periódica de productos y pedidos
Resultados
Esta arquitectura reduce la fricción con el framework creando capas de responsabilidad independientes que no dependen del framework. La lógica de negocio está completamente separada de la infraestructura de Magento, y los casos de uso están claramente definidos, haciendo el sistema mantenible y testeable.
Tecnologías
- • PHP & Magento 2
- • Domain-Driven Design
- • Mediator Pattern
- • Hexagonal Architecture
- • Use Case Pattern
- • PSR Standards
Logros Clave
- • Definiciones claras de casos de uso como puntos de entrada de API
- • Lógica de negocio independiente del framework (podría ser cualquier librería PHP)
- • Empaquetado adecuado del SDK siguiendo estándares PSR
- • Separación de responsabilidades: capa de Casos de Uso vs capa de Infraestructura