Arquitectura del Sistema
Visión General de la Arquitectura
La aplicación implementa una arquitectura headless de e-commerce que separa el frontend del backend, permitiendo mayor flexibilidad, escalabilidad y personalización. La arquitectura está compuesta por los siguientes componentes principales:
- Frontend (Next.js)
- Proxy de Magento
- Magento
- Directus
- Typesense
Componentes Principales
-
Frontend (Next.js):
- Aplicación React/Next.js que sirve como la capa de presentación
- Implementa SSR (Server-Side Rendering) para mejoras de SEO y rendimiento
- Maneja el enrutamiento, la interfaz de usuario y la experiencia del usuario
-
Proxy de Magento:
- Capa intermedia que gestiona las comunicaciones con Magento
- Maneja sesiones y cookies para mantener la autenticación
- Permite superar limitaciones de CORS en desarrollo
-
CMS (Directus):
- Sistema headless para gestión de contenido
- Almacena datos no comerciales: banners, páginas de aterrizaje, promociones, etc.
- Proporciona una API GraphQL para consumir el contenido
-
Motor de Búsqueda (Typesense):
- Proporciona búsqueda rápida y relevante para el catálogo de productos
- Mantiene índices optimizados para consultas de productos
- Compatible con los componentes de Algolia para react
-
Backend de E-commerce (Magento):
- Maneja la lógica de negocio principal de e-commerce
- Gestiona catálogo, inventario, precios, carritos, pedidos y usuarios para headless
- Expone APIs GraphQL y REST que el frontend consume
Patrones de Diseño Utilizados
-
Patrón Proxy:
- Implementado en la comunicación con Magento para manejar CORS y sesiones
- Útil en modo desarrollo para preservar la sesión de usuario por medio de las cookies de magento
-
Patrón Servicio:
- Los servicios como
MagentoService.js,DirectusService.ts, etc., encapsulan la lógica de comunicación con APIs externas
- Los servicios como
-
Patrón Contexto (React Context):
- Utilizado para compartir estado global como datos del usuario, carrito, etc.
-
Patrón Factory:
- Se utilizan múltiples factories para decidir que componente se renderizará basado en un string o atributo en particular