Guía completa de arquitectura, estructura y configuración del
proyecto Angular
ProyectoTransporte
AutorElder Daniel Agudelo Pita
Fecha4/12/2025
Versión1.1
01
Resumen Ejecutivo
Este documento presenta la arquitectura técnica completa del
proyecto frontend desarrollado con Angular. El
sistema está diseñado siguiendo principios de desarrollo
empresarial, garantizando escalabilidad, mantenibilidad y
seguridad a través de una estructura modular bien definida.
El proyecto implementa un sistema de gestión integral con
control de acceso basado en roles, autenticación mediante tokens
JWT, y una arquitectura de componentes reutilizables que
facilita el desarrollo colaborativo y el mantenimiento a largo
plazo.
02
Introducción
2.1 Propósito del Documento
Este documento técnico tiene como objetivo proporcionar una guía
exhaustiva sobre la arquitectura, estructura y configuración del
proyecto frontend. Está diseñado para servir como referencia
principal para:
Desarrolladores que se integren al proyecto
Arquitectos de software que necesiten evaluar decisiones
técnicas
Equipos de QA para comprender la estructura de pruebas
Personal de soporte técnico
Auditores de seguridad
2.2 Alcance
La documentación cubre los siguientes aspectos del proyecto:
Arquitectura
Arquitectura general del sistema frontend
Estructura
Estructura de directorios y organización del código
Configuración
Configuración de entornos de desarrollo y producción
Seguridad
Implementación de seguridad y control de acceso
Patrones
Patrones de diseño aplicados
Routing
Estrategias de routing y navegación
2.3 Audiencia
Este documento está dirigido a profesionales técnicos con
conocimientos en:
Desarrollo web con Angular (versión 8+)
TypeScript y JavaScript ES6+
Arquitectura de aplicaciones SPA (Single Page Application)
Conceptos de seguridad web y autenticación
Herramientas de desarrollo frontend modernas
03
Arquitectura del Sistema
3.1 Visión General
El proyecto implementa una arquitectura de
Single Page Application (SPA) basada en el
framework Angular. La aplicación sigue el patrón arquitectónico
MVC (Model-View-Controller) adaptado a las mejores prácticas de
Angular:
M
Model
Interfaces TypeScript y modelos de datos
V
View
Templates HTML con Angular templating
C
Controller
Componentes TypeScript con lógica de presentación
3.2 Stack Tecnológico
Tecnología
Versión
Propósito
Angular
8+
Framework principal
TypeScript
3.5+
Lenguaje de programación
RxJS
6+
Programación reactiva
PrimeNG
Latest
Biblioteca de componentes UI
Node.js
12+
Entorno de ejecución
npm
6+
Gestor de paquetes
3.3 Patrones de Diseño
El proyecto implementa los siguientes patrones:
Patrón Observable:Para manejo de eventos asíncronos y comunicación entre
componentes
Patrón Singleton:En servicios inyectables
Patrón Guard:Para protección de rutas
Patrón Module:Para organización y lazy loading
Patrón Dependency Injection:Para inyección de dependencias
04
Estructura del Proyecto
4.1 Organización de Carpetas
Estructura de Directorios
proyecto/
│
├── .vscode/ # Configuraciones del IDE
├── assets/ # Recursos estáticos
├── dist/ # Código compilado
├── e2e/ # Pruebas end-to-end
├── node_modules/ # Dependencias
├── src/ # Código fuente
│ ├── app/
│ │ ├── components/ # Componentes visuales
│ │ ├── constants/ # Constantes globales
│ │ ├── guards/ # Guardias de ruta
│ │ ├── models/ # Modelos de datos
│ │ └── services/ # Servicios
│ ├── assets/ # Recursos de la aplicación
│ └── environments/ # Configuraciones de entorno
├── angular.json # Configuración de Angular CLI
├── package.json # Dependencias del proyecto
└── tsconfig.json # Configuración de TypeScript
4.2 Directorio .vscode
Propósito
Configuraciones específicas del IDE Visual Studio Code.
Contenido principal:
launch.json: Define configuraciones de depuración
que permiten lanzar Google Chrome automáticamente apuntando a la
aplicación local (http://localhost:4200)
Beneficios:
Estandarización del entorno de desarrollo
Facilita la depuración del equipo
Acelera la configuración inicial para nuevos desarrolladores
4.3 Directorio assets
Propósito
Almacenamiento de recursos estáticos que se cargan al iniciar la
aplicación.
Contenido:
Imágenes del proyecto (logos, iconos, backgrounds)
Archivos de íconos (.ico)
Recursos visuales que no cambian dinámicamente
Características:
Los archivos se sirven directamente sin procesamiento
Se copian tal cual al directorio dist/ durante el build
Optimizados para carga inicial de la aplicación
4.4 Directorio dist
4.4.1 Subdirectorio dist/frontend
Propósito
Contiene la versión final, optimizada y lista para producción
del proyecto.
Características:
Código JavaScript transpilado y minificado
Archivos CSS consolidados y optimizados
HTML procesado y optimizado
Source maps para depuración (opcional)
Destinos de despliegue:
Servidores web
Nginx, Apache, IIS
Cloud
Firebase, AWS S3, Azure
Contenedores
Docker
CDN
Content Delivery Networks
4.4.2 Subdirectorio dist/assets
Contenido:
Imágenes optimizadas (PNG, JPG, ICO, SVG)
Íconos y fuentes de PrimeNG/PrimeIcons
Archivos de configuración JSON
Archivos de licencias
Archivo de configuración global para labels de formularios
Nota importante
Este directorio incluye el archivo de configuración global que
centraliza los nombres de campos, labels de variables de
formularios e IDs requeridos en el proyecto, facilitando la
internacionalización y el mantenimiento.
4.5 Directorio e2e
Propósito
Contiene las pruebas end-to-end (E2E) del proyecto Angular.
Las pruebas E2E simulan la interacción real del usuario con la
aplicación completa desplegada en un navegador, validando:
Navegación entre páginas
Componentes visibles y su comportamiento
Flujos funcionales completos
Integración frontend-backend
Casos de uso de extremo a extremo
Estado actual: Las pruebas E2E no se ejecutan
actualmente en este entorno.
Nota histórica: Estas pruebas tradicionalmente se
ejecutaban con Protractor, que Angular incluía por defecto en
versiones antiguas. Las versiones modernas de Angular utilizan
otras herramientas como Cypress o Playwright.
4.6 Directorio node_modules
Propósito
Almacena todas las dependencias del proyecto instaladas vía npm.
Contenido:
Dependencias declaradas en package.json
Dependencias transitivas (dependencias de las dependencias)
Herramientas del framework Angular
Librerías para compilar TypeScript
Angular CLI y sus herramientas
Polyfills para compatibilidad con navegadores
Paquetes de desarrollo incluidos:
TypeScript (compilador)Webpack (bundler)Karma (test runner)Jasmine (framework de pruebas)Compodoc (generador de documentación)ESLint/TSLint (linters)
Nota: Este directorio no se versiona en el
control de código fuente (incluido en .gitignore) y se regenera
con npm install.
4.7 Directorio src (Sources)
Propósito
Contiene todo el código fuente de la aplicación.
Este directorio es el corazón del proyecto y contiene la lógica de
negocio, componentes visuales, servicios, modelos y
configuraciones que definen el comportamiento de la aplicación.
05
Componentes del Sistema
5.1 Directorio components
Propósito
Contiene todos los componentes visuales que conforman las
interfaces del proyecto.
Funciones principales:
Gestionar vistas y pantallas
Controlar formularios, tablas, modales y elementos UI
El sistema implementa autenticación basada en tokens JWT (JSON Web
Tokens) con las siguientes características:
Flujo de autenticación:
1Usuario envía credenciales
→
2Backend valida y retorna JWT
→
3Frontend almacena token
→
4Token en cada petición HTTP
→
5Guards validan token
Ventajas:
Stateless (sin sesión en servidor)
Escalable horizontalmente
Compatible con microservicios
Permite expiración automática
7.2 Guards Implementados
El sistema cuenta con 5 guards principales que trabajan en
conjunto para proporcionar seguridad multinivel:
AccesocentralGuard: Primera línea de defensa
(sesión válida)
AccesochildGuard: Segunda capa (permisos por
módulo)
AccesoparametrizacionGuard: Protección de
configuración crítica
AccesoOrdenServicioGuard: Control granular por
registro
AccesopasajeroGuard: Aislamiento de módulos
sensibles
7.3 Gestión de Tokens
Almacenamiento:
Token guardado en localStorage para persistencia
Renovación automática antes de expiración
Eliminación al cerrar sesión
Validación:
Verificación de expiración en cada navegación
Validación de firma contra backend
Cierre automático de sesión si el token es inválido
Interceptores HTTP:
Recomendación de uso
Es altamente recomendable implementar un
HttpInterceptor para gestionar automáticamente el
envío del token en todas las peticiones HTTP. Esto evita repetir
lógica en los servicios, mejora la organización interna del
proyecto y asegura una aplicación más consistente y segura.
Ventajas:
Centraliza la lógica de autenticación y encabezados.
Reduce la duplicación de código en los servicios.
Permite manejo global de errores como 401 o 403.
Facilita implementar refresh tokens laterales.
En general, el uso de interceptores es una
buena práctica esencial en Angular, especialmente
en aplicaciones que manejan autenticación basada en tokens o
múltiples servicios REST.
# Desarrollo
ng serve # Iniciar servidor de desarrollo
ng serve --port 4200 # Especificar puerto
ng serve --open # Abrir navegador automáticamente# Generación de Código
ng g c components/nombre # Generar componente
ng g s services/nombre # Generar servicio
ng g guard guards/nombre # Generar guard
ng g module modules/nombre # Generar módulo
ng g interface models/nombre # Generar interface# Build
ng build # Build de desarrollo
ng build --prod # Build de producción
ng build --prod --aot # Build con AOT compilation# Pruebas
ng test # Ejecutar pruebas unitarias
ng test --code-coverage # Pruebas con reporte de cobertura
ng e2e # Ejecutar pruebas E2E# Análisis
ng lint # Ejecutar linter
ng build --prod --stats-json # Generar estadísticas de bundle