DocumentaciΓ³n
Arquitectura

Arquitectura de Fox Framework

Este documento explica la arquitectura general de Fox Framework, sus componentes principales y cΓ³mo se relacionan entre sΓ­.

VisiΓ³n General

Fox Framework estΓ‘ construido siguiendo principios de diseΓ±o modernos y patrones establecidos para asegurar mantenibilidad, extensibilidad y rendimiento. La arquitectura general se compone de varias capas:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    AplicaciΓ³n                       β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β”‚ Rutas   β”‚  β”‚ Controladores β”‚ Servicios        β”‚ β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Fox Framework Core                   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β”‚ Factory β”‚  β”‚ Router   β”‚  β”‚ Middleware         β”‚ β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β”‚ Cache   β”‚  β”‚ Eventos  β”‚  β”‚ Seguridad          β”‚ β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              CaracterΓ­sticas Avanzadas              β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β”‚ DB      β”‚  β”‚ Microservices β”‚ Docker           β”‚ β”‚
β”‚  β”‚         β”‚  β”‚          β”‚  β”‚                    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Componentes Principales

1. FoxFactory

El nΓΊcleo del framework y punto de entrada principal. Implementa el patrΓ³n Factory para crear instancias de los componentes del framework.

Responsabilidades:

  • Crear instancias del servidor
  • Registrar servicios y plugins
  • Gestionar configuraciΓ³n
  • Inicializar componentes del framework

2. Router

Gestiona el enrutamiento de peticiones HTTP, mapeo de rutas a controladores y generaciΓ³n de URLs.

CaracterΓ­sticas:

  • Soporte para rutas parametrizadas
  • Middlewares especΓ­ficos por ruta
  • AgrupaciΓ³n de rutas
  • ValidaciΓ³n de parΓ‘metros

3. Middleware

Sistema de pipeline para procesar peticiones HTTP. Permite interceptar y modificar peticiones y respuestas.

Tipos de middleware:

  • Globales (aplican a todas las rutas)
  • EspecΓ­ficos de ruta
  • Grupales (aplican a un grupo de rutas)
  • Error handlers

4. Sistema de Eventos

Implementa una arquitectura orientada a eventos que permite comunicaciΓ³n desacoplada entre componentes.

CaracterΓ­sticas:

  • Event Sourcing
  • Publish-Subscribe
  • Event Store
  • Event Handlers

5. Cache System

Sistema de cachΓ© para optimizar rendimiento y reducir carga en recursos externos.

Providers:

  • Memory
  • Redis
  • File
  • Distributed

6. Security

Componentes para gestionar autenticaciΓ³n, autorizaciΓ³n y otras caracterΓ­sticas de seguridad.

CaracterΓ­sticas:

  • JWT Authentication
  • Role-Based Access Control
  • Rate Limiting
  • CSRF Protection

Patrones de DiseΓ±o Utilizados

Factory Pattern

Fox Framework utiliza extensivamente el patrΓ³n Factory para crear instancias de componentes:

// Ejemplo de Factory Pattern
const server = FoxFactory.createInstance(config);
const cache = FoxFactory.createCacheProvider(cacheConfig);
const router = Router.create();

Dependency Injection

Para gestionar dependencias entre componentes y facilitar el testing:

// Registrar un servicio
FoxFactory.registerService('userService', new UserService());
 
// Obtener el servicio
const userService = FoxFactory.getService('userService');

Repository Pattern

Para la capa de acceso a datos:

// DefiniciΓ³n del repositorio
interface UserRepository {
  findById(id: number): Promise<User | null>;
  findAll(): Promise<User[]>;
  save(user: User): Promise<User>;
}
 
// ImplementaciΓ³n concreta
class PostgresUserRepository implements UserRepository {
  // implementaciΓ³n...
}

Strategy Pattern

Para componentes intercambiables:

// Diferentes estrategias de cache
const memoryCacheStrategy = new MemoryCacheStrategy();
const redisCacheStrategy = new RedisCacheStrategy();
 
// Usar una estrategia
const cache = new CacheManager(memoryCacheStrategy);

Flujo de una PeticiΓ³n

  1. La peticiΓ³n HTTP llega al servidor
  2. El sistema de routing identifica la ruta correspondiente
  3. Se ejecutan los middlewares globales
  4. Se ejecutan los middlewares especΓ­ficos de la ruta
  5. Se ejecuta el controlador o handler de la ruta
  6. Se genera y envΓ­a la respuesta

Extensibilidad

Fox Framework estΓ‘ diseΓ±ado para ser extensible mediante:

  1. Plugins: AΓ±aden funcionalidades completas
  2. Middlewares: Modifican el flujo de peticiones
  3. Proveedores personalizados: Para servicios como cache, logging, etc.
  4. Eventos: Para reaccionar a acciones del framework

Directrices de Arquitectura

Al desarrollar con Fox Framework, recomendamos seguir estos principios:

  1. SeparaciΓ³n de responsabilidades: MantΓ©n modelos, controladores y servicios separados
  2. InversiΓ³n de dependencias: Usa interfaces y no dependas de implementaciones concretas
  3. ComposiciΓ³n sobre herencia: Favorece la composiciΓ³n para reutilizar cΓ³digo
  4. CΓ³digo testeable: DiseΓ±a componentes fΓ‘ciles de testear de forma aislada
  5. SOLID: Sigue los principios SOLID para un cΓ³digo mantenible

Arquitectura Recomendada de Proyecto

proyecto/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ controllers/     # Controladores (lΓ³gica de manejo de peticiones)
β”‚   β”œβ”€β”€ models/          # Modelos de datos y entidades
β”‚   β”œβ”€β”€ services/        # Servicios (lΓ³gica de negocio)
β”‚   β”œβ”€β”€ repositories/    # Acceso a datos
β”‚   β”œβ”€β”€ routes/          # DefiniciΓ³n de rutas
β”‚   β”œβ”€β”€ middleware/      # Middlewares personalizados
β”‚   β”œβ”€β”€ utils/           # Utilidades y helpers
β”‚   β”œβ”€β”€ events/          # Eventos y handlers
β”‚   β”œβ”€β”€ config/          # Configuraciones
β”‚   β”œβ”€β”€ types/           # Definiciones de tipos TypeScript
β”‚   └── server.ts        # Punto de entrada de la aplicaciΓ³n
β”œβ”€β”€ tests/               # Tests unitarios e integraciΓ³n
└── resources/           # Recursos estΓ‘ticos

Esta estructura permite una clara separaciΓ³n de responsabilidades y facilita encontrar y mantener el cΓ³digo.