Architecture - jjaroztegi/BuildingSignalSimulator GitHub Wiki

Architecture

πŸ‡ͺπŸ‡Έ Ver en espaΓ±ol

Overview

The Building Signal Simulator is built using a three-tier architecture:

  1. Frontend (Presentation Layer)
  2. Backend (Business Logic Layer)
  3. Database (Data Layer)

Technical Stack

Backend

  • Language: Java 1.8 (JDK 1.8.0_131)
  • Server: Apache Tomcat 9.0.89
  • API: javax.servlet for HTTP request handling
  • Database Access: JDBC for database operations

Frontend

  • HTML: Structure and content
  • JavaScript: ES6 modules for functionality
  • CSS: Tailwind CSS for styling
  • Theme: Built-in dark mode support

Database

  • Primary: MS Access via JDBC
  • Alternative: Apache Derby (embedded)
  • Schema: Relational database with component and configuration tables

Project Structure

β”œβ”€β”€ src/                    # Java source files
β”‚   └── com/
β”‚       └── signalapp/      # Main application code
β”‚           β”œβ”€β”€ dao/        # Data Access Objects
β”‚           β”œβ”€β”€ models/     # Data models
β”‚           β”œβ”€β”€ servlets/   # Servlet controllers
β”‚           └── tests/      # Unit tests
β”œβ”€β”€ webapp/                 # Web application files
β”‚   β”œβ”€β”€ js/                # JavaScript files
β”‚   β”‚   β”œβ”€β”€ script.js      # Main application logic
β”‚   β”‚   └── modules/       # JavaScript modules
β”‚   β”œβ”€β”€ WEB-INF/           # Web configuration
β”‚   └── index.html         # Main application page
β”œβ”€β”€ database/              # Database files and SQL scripts
β”œβ”€β”€ doc/                   # Documentation
β”œβ”€β”€ lib/                   # Required JAR dependencies
β”œβ”€β”€ tools/                 # Jakarta migration tool
β”œβ”€β”€ Dockerfile            # Docker configuration
└── docker-compose.yml    # Docker Compose configuration

Component Architecture

Backend Components

1. Data Access Layer (DAO)

Located in src/com/signalapp/dao/

  • BaseDAO.java

    • Abstract base class for all DAOs
    • Implements common CRUD operations
    • Handles connection management
  • AccessConnection.java

    • MS Access database connection management
    • Connection pooling
    • Transaction handling
  • DerbyConnection.java

    • Apache Derby database connection management
    • Alternative database support
    • Embedded database configuration
  • Entity-specific DAOs

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

2. Model Layer

Located in src/com/signalapp/models/

  • Base Models

    • Componente.java
    • TipoComponente.java
    • Configuracion.java
    • MargenCalidad.java
  • Component-specific Models

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

3. Servlet Controllers

Located in src/com/signalapp/servlets/

  • ConfigurationServlet.java

    • Handles configuration management
    • CRUD operations for configurations
    • Configuration validation
  • ComponentServlet.java

    • Component management
    • Component type handling
    • Property validation
  • SignalTypeServlet.java

    • Signal type management
    • Quality margin handling
  • SignalCalculationServlet.java

    • Signal level calculations
    • Validation against margins
    • Cost calculations

Frontend Components

1. Core Application

Located in webapp/

  • index.html
    • Main application entry point
    • Tab-based interface
    • Responsive layout

2. JavaScript Modules

Located in webapp/js/modules/

  • servlet.js

    • API communication
    • Request/response handling
    • Error management
  • ui.js

    • UI updates
    • DOM manipulation
    • Event handling
  • forms.js

    • Form management
    • Input validation
    • Form submission
  • tabs.js

    • Tab navigation
    • Content switching
    • State management
  • theme.js

    • Theme switching
    • Dark mode handling
    • Preference persistence
  • utils.js

    • Helper functions
    • Data formatting
    • Validation utilities

Communication Flow

  1. User Interaction

    User β†’ Frontend β†’ JavaScript Modules β†’ API Calls
    
  2. API Request Processing

    API Call β†’ Servlet β†’ Business Logic β†’ DAO β†’ Database
    
  3. Response Flow

    Database β†’ DAO β†’ Business Logic β†’ Servlet β†’ JSON Response β†’ Frontend
    

Security Considerations

  1. Input Validation

    • Frontend validation
    • Server-side validation in servlets
    • Prepared statements for SQL
  2. Error Handling

    • Consistent error format
    • Appropriate error codes
    • User-friendly messages
  3. Data Protection

    • SQL injection prevention
    • XSS prevention
    • CSRF protection

Performance Optimization

  1. Database

    • Indexed key columns
    • Connection pooling
    • Prepared statements
  2. Frontend

    • Modular JavaScript
    • Efficient DOM updates
    • Resource caching
  3. Backend

    • Response caching
    • Efficient algorithms
    • Resource pooling

Development Workflow

  1. Local Development

    • Manual compilation
    • Hot reload for frontend
    • Local database
  2. Testing

    • Unit tests
    • Integration tests
    • Manual testing
  3. Deployment

    • Manual deployment
    • Docker containerization
    • Configuration management