Architecture.es - jjaroztegi/BuildingSignalSimulator GitHub Wiki

Arquitectura

🇬🇧 View in English

Descripción General

El Simulador de Distribución de Señal está construido utilizando una arquitectura de tres capas:

  1. Frontend (Capa de Presentación)
  2. Backend (Capa de Lógica de Negocio)
  3. Base de Datos (Capa de Datos)

Stack Tecnológico

Backend

  • Lenguaje: Java 1.8 (JDK 1.8.0_131)
  • Servidor: Apache Tomcat 9.0.89
  • API: javax.servlet para manejo de peticiones HTTP
  • Acceso a Base de Datos: JDBC para operaciones de base de datos

Frontend

  • HTML: Estructura y contenido
  • JavaScript: Módulos ES6 para funcionalidad
  • CSS: Tailwind CSS para estilos
  • Tema: Soporte integrado para modo oscuro

Base de Datos

  • Principal: MS Access vía JDBC
  • Alternativa: Apache Derby (embebida)
  • Esquema: Base de datos relacional con tablas de componentes y configuraciones

Estructura del Proyecto

├── src/                    # Archivos fuente Java
│   └── com/
│       └── signalapp/      # Código principal de la aplicación
│           ├── dao/        # Objetos de Acceso a Datos
│           ├── models/     # Modelos de datos
│           ├── servlets/   # Controladores servlet
│           └── tests/      # Pruebas unitarias
├── webapp/                 # Archivos de aplicación web
│   ├── js/                # Archivos JavaScript
│   │   ├── script.js      # Lógica principal de aplicación
│   │   └── modules/       # Módulos JavaScript
│   ├── WEB-INF/           # Configuración web
│   └── index.html         # Página principal
├── database/              # Archivos de base de datos y scripts SQL
├── doc/                   # Documentación
├── lib/                   # Dependencias JAR requeridas
├── tools/                 # Herramienta de migración Jakarta
├── Dockerfile            # Configuración Docker
└── docker-compose.yml    # Configuración Docker Compose

Arquitectura de Componentes

Componentes Backend

1. Capa de Acceso a Datos (DAO)

Ubicada en src/com/signalapp/dao/

  • BaseDAO.java

    • Clase base abstracta para todos los DAOs
    • Implementa operaciones CRUD comunes
    • Maneja la gestión de conexiones
  • AccessConnection.java

    • Gestión de conexión a base de datos MS Access
    • Pool de conexiones
    • Manejo de transacciones
  • DerbyConnection.java

    • Gestión de conexión a base de datos Derby
    • Soporte de base de datos alternativa
    • Configuración de base de datos embebida
  • DAOs Específicos de Entidad

    • ComponenteDAO.java
    • TiposComponenteDAO.java
    • CoaxialDAO.java
    • DerivadorDAO.java
    • DistribuidorDAO.java
    • TomaDAO.java
    • ConfiguracionDAO.java
    • MargenCalidadDAO.java

2. Capa de Modelos

Ubicada en src/com/signalapp/models/

  • Modelos Base

    • Componente.java
    • TipoComponente.java
    • Configuracion.java
    • MargenCalidad.java
  • Modelos Específicos de Componente

    • Coaxial.java
    • Derivador.java
    • Distribuidor.java
    • Toma.java

3. Controladores Servlet

Ubicados en src/com/signalapp/servlets/

  • ConfigurationServlet.java

    • Manejo de configuraciones
    • Operaciones CRUD para configuraciones
    • Validación de configuración
  • ComponentServlet.java

    • Gestión de componentes
    • Manejo de tipos de componente
    • Validación de propiedades
  • SignalTypeServlet.java

    • Gestión de tipos de señal
    • Manejo de márgenes de calidad
  • SignalCalculationServlet.java

    • Cálculos de nivel de señal
    • Validación contra márgenes
    • Cálculos de costos

Componentes Frontend

1. Aplicación Principal

Ubicada en webapp/

  • index.html
    • Punto de entrada principal
    • Interfaz basada en pestañas
    • Diseño responsivo

2. Módulos JavaScript

Ubicados en webapp/js/modules/

  • servlet.js

    • Comunicación con API
    • Manejo de solicitudes/respuestas
    • Gestión de errores
  • ui.js

    • Actualizaciones de UI
    • Manipulación del DOM
    • Manejo de eventos
  • forms.js

    • Gestión de formularios
    • Validación de entrada
    • Envío de formularios
  • tabs.js

    • Navegación por pestañas
    • Cambio de contenido
    • Gestión de estado
  • theme.js

    • Cambio de tema
    • Manejo de modo oscuro
    • Persistencia de preferencias
  • utils.js

    • Funciones auxiliares
    • Formateo de datos
    • Utilidades de validación

Flujo de Comunicación

  1. Interacción del Usuario

    Usuario → Frontend → Módulos JavaScript → Llamadas API
    
  2. Procesamiento de Solicitud API

    Llamada API → Servlet → Lógica de Negocio → DAO → Base de Datos
    
  3. Flujo de Respuesta

    Base de Datos → DAO → Lógica de Negocio → Servlet → Respuesta JSON → Frontend
    

Consideraciones de Seguridad

  1. Validación de Entrada

    • Validación frontend
    • Validación servidor en servlets
    • Sentencias preparadas para SQL
  2. Manejo de Errores

    • Formato de error consistente
    • Códigos de error apropiados
    • Mensajes amigables para el usuario
  3. Protección de Datos

    • Prevención de inyección SQL
    • Prevención de XSS
    • Protección CSRF

Optimización de Rendimiento

  1. Base de Datos

    • Columnas clave indexadas
    • Pool de conexiones
    • Sentencias preparadas
  2. Frontend

    • JavaScript modular
    • Actualizaciones DOM eficientes
    • Caché de recursos
  3. Backend

    • Caché de respuestas
    • Algoritmos eficientes
    • Pool de recursos

Flujo de Desarrollo

  1. Desarrollo Local

    • Compilación manual
    • Recarga en caliente para frontend
    • Base de datos local
  2. Pruebas

    • Pruebas unitarias
    • Pruebas de integración
    • Pruebas manuales
  3. Despliegue

    • Despliegue manual
    • Contenerización Docker
    • Gestión de configuración