Principios Básicos
Este monorepo sigue una arquitectura limpia y escalable diseñada para el desarrollo server-first utilizando Next.js App Router, TypeScript, XState y Yup. Establece estándares para:- Separación de Responsabilidades: Delimitando claramente las responsabilidades entre capas (UI, Actions, Machines, Services) siguiendo los principios de la Arquitectura en Capas.
- Soporte para Microfrontends: Permitiendo el desarrollo y despliegue independiente de aplicaciones de dominio de negocio distintas utilizando un enfoque de Arquitectura de Microfrontends.
- Reutilización de código: Maximizando el intercambio de código entre aplicaciones mediante paquetes centralizados.
- Orquestación del estado del servidor: Utilizando máquinas de estado XState tipadas (Patrón State) para gestionar procesos de negocio complejos del lado del servidor, orquestando llamadas a la Capa de Servicios.
- Capa de Servicios Estructurada: Empleando una estructura orientada al dominio (Patrón Strategy, Factory Method/Service Locator) para definir abstracciones de servicio (interfaces, DTOs de métodos) separadamente de las implementaciones concretas, invocadas por las máquinas de estado.
Estructura del Monorepo
El proyecto está organizado enapps (unidades desplegables/microfrontends) y packages (código compartido).
Estructura Raíz del Proyecto
mappnext/ds-tw, instalada como una dependencia.
Comandos y Configuración
Comandos estándar ejecutados desde la raíz del monorepo:Comandos Comunes de Desarrollo
Roles de los Paquetes Compartidos (packages/)
La funcionalidad compartida se organiza en paquetes dedicados. Los componentes UI provienen de una librería externa.
| Paquete | Descripción | Ejemplo de Uso Estándar |
|---|---|---|
@core | Centro neurálgico para la lógica de dominio: actions, machines (Patrón State), services (siguiendo patrones Strategy/Factory con separación dominio/impl), tipos core (entidades, comunes, machine), esquemas de validación. | import { createUserAction } from '@core/actions'; |
@hooks | Hooks de React reutilizables para intereses transversales o lógica UI compleja. | import { useFormValidation } from '@hooks/forms'; |
@config | Acceso a variables de entorno, configuración en tiempo de ejecución, feature flags. | import { isBetaFeatureEnabled } from '@config'; |
mappnext/ds-tw/* | Librería UI Obligatoria (Externa). Proporciona todos los componentes UI estándar. | import { Button } from 'mappnext/ds-tw/atoms/Button'; |
Stack Tecnológico
Las tecnologías centrales exigidas por esta arquitectura:| Herramienta | Propósito | Ubicación Clave / Área de Uso |
|---|---|---|
| Next.js | Framework React full-stack | apps/* (App Router, Server Components, Server Actions) |
| TypeScript | Tipado estático | Todo el código base (.ts, .tsx) |
| XState | Máquinas de estado y flujos de trabajo | packages/core/machines/ (invocado por Actions, llama a Services) |
| Yup | Definición y validación de esquemas | packages/core/validation/ (usado por actions) |
| Turborepo | Sistema de build/orquestador para monorepos | turbo.json, Comandos raíz |
| pnpm | Gestor de paquetes eficiente | package.json raíz, workspaces |
| React | Librería UI Frontend | apps/*, packages/hooks |
mappnext/ds-tw | Librería de Componentes UI Estándar | Dependencia Externa, Importada en apps/* |
| TailwindCSS | Framework CSS Utility-first | Usado por mappnext/ds-tw y potencialmente en apps/* |