Context del Projecte
El projecte va consistir en construir una plataforma d'e-commerce B2C sobre Magento 2 per a una agència de viatges, on l'oferta comercial (hotels, cotxes, serveis) era gestionada externament per un Centre de Reserves especialitzat. Magento no era la font de veritat per a productes o disponibilitat. En el seu lloc, actuava com un orquestador comercial, responsable de la interacció de l'usuari, checkout i cicle de vida de comandes, mentre que tota la intel·ligència de reserves vivia fora de la plataforma. El desafiament era integrar ambdós mons de forma fluida sense forçar Magento a un rol per al qual no va ser dissenyat.
Desafiament Tècnic
La dificultat principal era reconciliar dos models fonamentalment diferents: el model comercial basat en catàleg de Magento i un sistema de reserves basat en APIs en temps real.
Els desafiaments clau incloïen:
- • No hi ha productes físics emmagatzemats a Magento
- • Disponibilitat i preus dinàmics basats en dates, nombre de viatgers i ubicacions de recollida
- • Descobriment de productes en temps real a PLP
- • Vinculació tardana de detalls d'oferta a PDP i checkout
- • Sincronització de comandes de Magento amb el cicle de vida del Centre de Reserves
Una integració ingènua hauria resultat en un sistema fràgil i fortament acoblat.
Solució Arquitectònica
La solució va ser dissenyada usant Domain-Driven Design i Arquitectura Hexagonal, separant clarament responsabilitats i contextos acotats.
- • Contextos Acotats i Separació de Domini: El sistema es va dividir en Contextos Acotats diferents, cadascun amb les seves pròpies responsabilitats i APIs: Context de Cerca i Descobriment (responsable de la generació de PLP, els productes no es persisteixen, els resultats es construeixen dinàmicament des de respostes de l'API del Centre de Reserves), Context d'Ofertes (PDP resol detalls d'oferta en temps real, disponibilitat i preus finals es validen just abans d'afegir a la cistella), i Context de Comandes i Reserves (el cicle de vida de comandes es va modelar explícitament a través de Casos d'Ús independents: Enviar Comanda al Centre de Reserves, Cancel·lar Reserva, Tancar Reserva i Generació de Factura).
- • Model d'Integració Hexagonal: La lògica de domini defineix Ports que representen interaccions amb el Centre de Reserves (cercar ofertes, validar disponibilitat, crear reserva, cancel·lar reserva, tancar reserva). Els Adaptadors concrets implementen aquests ports usant l'API del Centre de Reserves. Això assegura que no hi hagi dependència directa del domini a APIs externes, integracions reemplaçables o simulables, i propietat clara de les regles de negoci.
- • Magento com a Capa d'Aplicació: Magento va ser intencionalment mantingut fora de les decisions de domini. Les seves responsabilitats es van limitar a renderitzat d'UI, flux de cistella i checkout, persistència de comandes, i activació d'esdeveniments. Totes les decisions crítiques de negoci van ser delegades als serveis de domini exposats a través de la capa d'integració.
Estratègia de Proves i Qualitat
La qualitat i la fiabilitat van ser crítiques a causa de l'impacte financer i operacional de les reserves.
- • Aïllament de domini: La lògica de reserves i els fluxos de treball de comandes es van provar de forma aïllada. Les interaccions amb APIs externes es van simular mitjançant substitucions d'adaptadors. No es requereix inicialització de Magento per proves de domini.
- • Proves de contracte: Contractes forts definits per a respostes del Centre de Reserves. Validació de casos límit: canvis de preu, pèrdua de disponibilitat, fallades parcials de reserva.
- • Comportament determinista: Cada Cas d'Ús tenia entrades i sortides explícites. Patró de Resultat usat per expressar èxit, errors recuperables i violacions de regles de negoci. Això va assegurar un comportament previsible en tot el cicle de vida de reserves.
Resultats
Magento completament desacoblat de la complexitat de reserves, descobriment de productes en temps real sense persistència de catàleg, límits de domini clars i mantenibles, sincronització robusta del cicle de vida de comandes amb sistemes externs, i una arquitectura escalable adequada per a múltiples canals de venda.
Tecnologies
- • Magento 2
- • PHP 7/8
- • Domain-Driven Design (DDD)
- • Hexagonal Architecture (Ports & Adapters)
- • External Booking Center APIs
- • REST integrations
- • Result Pattern
- • DTOs
Assoliments Clau
- • Desacoblament complet entre Magento i la intel·ligència de reserves
- • Descobriment de productes en temps real sense persistència de catàleg
- • Límits de domini clars amb contextos acotats independents
- • Sincronització robusta del cicle de vida de comandes amb sistemes externs
- • Arquitectura escalable adequada per a múltiples canals de venda