Architecture.es - jjaroztegi/BuildingSignalSimulator GitHub Wiki
Arquitectura
Descripción General
El Simulador de Distribución de Señal está construido utilizando una arquitectura de tres capas:
- Frontend (Capa de Presentación)
- Backend (Capa de Lógica de Negocio)
- 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
-
Interacción del Usuario
Usuario → Frontend → Módulos JavaScript → Llamadas API
-
Procesamiento de Solicitud API
Llamada API → Servlet → Lógica de Negocio → DAO → Base de Datos
-
Flujo de Respuesta
Base de Datos → DAO → Lógica de Negocio → Servlet → Respuesta JSON → Frontend
Consideraciones de Seguridad
-
Validación de Entrada
- Validación frontend
- Validación servidor en servlets
- Sentencias preparadas para SQL
-
Manejo de Errores
- Formato de error consistente
- Códigos de error apropiados
- Mensajes amigables para el usuario
-
Protección de Datos
- Prevención de inyección SQL
- Prevención de XSS
- Protección CSRF
Optimización de Rendimiento
-
Base de Datos
- Columnas clave indexadas
- Pool de conexiones
- Sentencias preparadas
-
Frontend
- JavaScript modular
- Actualizaciones DOM eficientes
- Caché de recursos
-
Backend
- Caché de respuestas
- Algoritmos eficientes
- Pool de recursos
Flujo de Desarrollo
-
Desarrollo Local
- Compilación manual
- Recarga en caliente para frontend
- Base de datos local
-
Pruebas
- Pruebas unitarias
- Pruebas de integración
- Pruebas manuales
-
Despliegue
- Despliegue manual
- Contenerización Docker
- Gestión de configuración