Contexto do Proxecto
O proxecto consistiu en construir unha plataforma de e-commerce B2C sobre Magento 2 para unha axencia de viaxes, onde a oferta comercial (hoteis, coches, servizos) era xestionada externamente por un Centro de Reservas especializado. Magento non era a fonte de verdade para produtos ou dispoñibilidade. No seu lugar, actuaba como un orquestador comercial, responsable da interacción do usuario, checkout e ciclo de vida de pedidos, mentres que toda a intelixencia de reservas vivía fóra da plataforma. O desafío era integrar ambos mundos de forma fluida sen forzar a Magento a un rol para o que non foi deseñado.
Desafío Técnico
A dificultade principal era reconciliar dous modelos fundamentalmente diferentes: o modelo comercial baseado en catálogo de Magento e un sistema de reservas baseado en APIs en tempo real.
Os desafíos clave incluían:
- • Non hai produtos físicos almacenados en Magento
- • Dispoñibilidade e prezos dinámicos baseados en datas, número de viaxeiros e ubicacións de recollida
- • Descubrimento de produtos en tempo real en PLP
- • Vinculación tardía de detalles de oferta en PDP e checkout
- • Sincronización de pedidos de Magento co ciclo de vida do Centro de Reservas
Unha integración inxenua tería resultado nun sistema fráxil e fortemente acoplado.
Solución Arquitectónica
A solución foi deseñada usando Domain-Driven Design e Arquitectura Hexagonal, separando claramente responsabilidades e contextos acotados.
- • Contextos Acotados e Separación de Dominio: O sistema dividiuse en Contextos Acotados distintos, cada un coas súas propias responsabilidades e APIs: Contexto de Busca e Descubrimento (responsable da xeración de PLP, os produtos non se persisten, os resultados constrúense dinamicamente desde respostas da API do Centro de Reservas), Contexto de Ofertas (PDP resolve detalles de oferta en tempo real, dispoñibilidade e prezos finais valídanse xusto antes de engadir ao carrito), e Contexto de Pedidos e Reservas (o ciclo de vida de pedidos modelouse explícitamente a través de Casos de Uso independentes: Enviar Pedido ao Centro de Reservas, Cancelar Reserva, Pechar Reserva e Xeración de Factura).
- • Modelo de Integración Hexagonal: A lóxica de dominio define Portos que representan interaccións co Centro de Reservas (buscar ofertas, validar dispoñibilidade, crear reserva, cancelar reserva, pechar reserva). Os Adaptadores concretos implementan estes portos usando a API do Centro de Reservas. Isto asegura que non haxa dependencia directa do dominio a APIs externas, integracións reemplazables ou simulables, e propiedade clara das regras de negocio.
- • Magento como Capa de Aplicación: Magento foi intencionalmente mantido fóra das decisións de dominio. As súas responsabilidades limitáronse a renderizado de UI, fluxo de carrito e checkout, persistencia de pedidos, e activación de eventos. Todas as decisións críticas de negocio foron delegadas aos servizos de dominio expostos a través da capa de integración.
Estratexia de Probas e Calidade
A calidade e a fiabilidade foron críticas debido ao impacto financeiro e operacional das reservas.
- • Illamento de dominio: A lóxica de reservas e os fluxos de traballo de pedidos probáronse de forma illada. As interaccións con APIs externas simularon mediante substitucións de adaptadores. Non se require inicialización de Magento para probas de dominio.
- • Probas de contrato: Contratos fortes definidos para respostas do Centro de Reservas. Validación de casos límite: cambios de prezo, perda de dispoñibilidade, fallos parciais de reserva.
- • Comportamento determinista: Cada Caso de Uso tiña entradas e saídas explícitas. Patrón de Resultado usado para expresar éxito, erros recuperables e violacións de regras de negocio. Isto asegurou un comportamento predecible en todo o ciclo de vida de reservas.
Resultados
Magento completamente desacoplado da complexidade de reservas, descubrimento de produtos en tempo real sen persistencia de catálogo, límites de dominio claros e mantibles, sincronización robusta do ciclo de vida de pedidos con sistemas externos, e unha arquitectura escalable adecuada para múltiples canles de venda.
Tecnoloxí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
- • Desacoplamento completo entre Magento e a intelixencia de reservas
- • Descubrimento de produtos en tempo real sen persistencia de catálogo
- • Límites de dominio claros con contextos acotados independentes
- • Sincronización robusta do ciclo de vida de pedidos con sistemas externos
- • Arquitectura escalable adecuada para múltiples canles de venda