Contexto del Proyecto
El proyecto consistió en construir una plataforma de e-commerce B2C sobre Magento 2 para una agencia de viajes, donde la oferta comercial (hoteles, coches, servicios) era gestionada externamente por un Centro de Reservas especializado. Magento no era la fuente de verdad para productos o disponibilidad. En su lugar, actuaba como un orquestador comercial, responsable de la interacción del usuario, checkout y ciclo de vida de pedidos, mientras que toda la inteligencia de reservas vivía fuera de la plataforma. El desafío era integrar ambos mundos de forma fluida sin forzar a Magento a un rol para el que no fue diseñado.
Desafío Técnico
La dificultad principal era reconciliar dos modelos fundamentalmente diferentes: el modelo comercial basado en catálogo de Magento y un sistema de reservas basado en APIs en tiempo real.
Los desafíos clave incluían:
- • No hay productos físicos almacenados en Magento
- • Disponibilidad y precios dinámicos basados en fechas, número de viajeros y ubicaciones de recogida
- • Descubrimiento de productos en tiempo real en PLP
- • Vinculación tardía de detalles de oferta en PDP y checkout
- • Sincronización de pedidos de Magento con el ciclo de vida del Centro de Reservas
Una integración ingenua habría resultado en un sistema frágil y fuertemente acoplado.
Solución Arquitectónica
La solución fue diseñada usando Domain-Driven Design y Arquitectura Hexagonal, separando claramente responsabilidades y contextos acotados.
- • Contextos Acotados y Separación de Dominio: El sistema se dividió en Contextos Acotados distintos, cada uno con sus propias responsabilidades y APIs: Contexto de Búsqueda y Descubrimiento (responsable de la generación de PLP, los productos no se persisten, los resultados se construyen dinámicamente desde respuestas de la API del Centro de Reservas), Contexto de Ofertas (PDP resuelve detalles de oferta en tiempo real, disponibilidad y precios finales se validan justo antes de añadir al carrito), y Contexto de Pedidos y Reservas (el ciclo de vida de pedidos se modeló explícitamente a través de Casos de Uso independientes: Enviar Pedido al Centro de Reservas, Cancelar Reserva, Cerrar Reserva y Generación de Factura).
- • Modelo de Integración Hexagonal: La lógica de dominio define Puertos que representan interacciones con el Centro de Reservas (buscar ofertas, validar disponibilidad, crear reserva, cancelar reserva, cerrar reserva). Los Adaptadores concretos implementan estos puertos usando la API del Centro de Reservas. Esto asegura que no haya dependencia directa del dominio a APIs externas, integraciones reemplazables o simulables, y propiedad clara de las reglas de negocio.
- • Magento como Capa de Aplicación: Magento fue intencionalmente mantenido fuera de las decisiones de dominio. Sus responsabilidades se limitaron a renderizado de UI, flujo de carrito y checkout, persistencia de pedidos, y activación de eventos. Todas las decisiones críticas de negocio fueron delegadas a los servicios de dominio expuestos a través de la capa de integración.
Estrategia de Pruebas y Calidad
La calidad y la fiabilidad fueron críticas debido al impacto financiero y operacional de las reservas.
- • Aislamiento de dominio: La lógica de reservas y los flujos de trabajo de pedidos se probaron de forma aislada. Las interacciones con APIs externas se simularon mediante sustituciones de adaptadores. No se requiere inicialización de Magento para pruebas de dominio.
- • Pruebas de contrato: Contratos fuertes definidos para respuestas del Centro de Reservas. Validación de casos límite: cambios de precio, pérdida de disponibilidad, fallos parciales de reserva.
- • Comportamiento determinista: Cada Caso de Uso tenía entradas y salidas explícitas. Patrón de Resultado usado para expresar éxito, errores recuperables y violaciones de reglas de negocio. Esto aseguró un comportamiento predecible en todo el ciclo de vida de reservas.
Resultados
Magento completamente desacoplado de la complejidad de reservas, descubrimiento de productos en tiempo real sin persistencia de catálogo, límites de dominio claros y mantenibles, sincronización robusta del ciclo de vida de pedidos con sistemas externos, y una arquitectura escalable adecuada para múltiples canales de venta.
Tecnologías
- • Magento 2
- • PHP 7/8
- • Domain-Driven Design (DDD)
- • Hexagonal Architecture (Ports & Adapters)
- • External Booking Center APIs
- • REST integrations
- • Result Pattern
- • DTOs
Logros Clave
- • Desacoplamiento completo entre Magento y la inteligencia de reservas
- • Descubrimiento de productos en tiempo real sin persistencia de catálogo
- • Límites de dominio claros con contextos acotados independientes
- • Sincronización robusta del ciclo de vida de pedidos con sistemas externos
- • Arquitectura escalable adecuada para múltiples canales de venta