Registro de decisiones - AlbertoMunozP/Parking-Management-System-Springboot GitHub Wiki
Arquitectura del Sistema: Core y API HTTP
- Estado: aceptada
- Fecha: 2024-03-21
Contexto y Declaración del Problema
Se necesita diseñar una arquitectura modular para facilitar el desarrollo y mantenimiento del sistema de gestión de aparcamientos.
Factores de Decisión
- Necesidad de una separación clara de responsabilidades
- Facilitar el desarrollo y mantenimiento del sistema
- Posibilidad de escalabilidad futura
Opciones Consideradas
- Monolito
- Microservicios
- Arquitectura modular (Core y API HTTP)
Resultado de la Decisión
Opción elegida: "Arquitectura modular (Core y API HTTP)", porque permite una separación clara de responsabilidades y facilita el mantenimiento y la escalabilidad del sistema.
Consecuencias Positivas
- Separación clara de responsabilidades
- Mantenimiento más fácil
- Posibilidad de escalabilidad futura
Consecuencias Negativas
- Requiere una planificación inicial cuidadosa
- Puede ser más complejo de implementar en comparación con un monolito
Pros y Contras de las Opciones
Monolito
- Pros
- Sencillo de implementar inicialmente
- Menor complejidad en la configuración inicial
- Contras
- Dificultad para escalar
- Mantenimiento complicado a medida que el sistema crece
Microservicios
- Pros
- Alta escalabilidad
- Independencia de servicios
- Contras
- Mayor complejidad de implementación
- Requiere una gestión de infraestructura más avanzada
Arquitectura modular (Core y API HTTP)
- Pros
- Separación clara de responsabilidades
- Facilita el mantenimiento y la escalabilidad
- Contras
- Requiere una planificación inicial cuidadosa
- Puede ser más complejo de implementar en comparación con un monolito
Nota
El equipo decidió usar una arquitectura modular para permitir una mejor separación de responsabilidades y facilitar el mantenimiento del sistema.
Gestión de Dependencias: Maven
- Estado: aceptada
- Fecha: 2024-03-21
Contexto y Declaración del Problema
Necesitamos gestionar dependencias y construir el proyecto de manera eficiente.
Factores de Decisión
- Integración con Spring Boot
- Popularidad y soporte
- Facilidad de uso
Opciones Consideradas
- Maven
- Gradle
- Ant
Resultado de la Decisión
Opción elegida: "Maven", porque se integra bien con Spring Boot, es popular y tiene un buen soporte.
Consecuencias Positivas
- Integración con Spring Boot
- Amplio soporte y documentación
- Facilidad de uso
Consecuencias Negativas
- Puede ser menos flexible en comparación con Gradle
Pros y Contras de las Opciones
Maven
- Pros
- Integración con Spring Boot
- Amplio soporte y documentación
- Facilidad de uso
- Contras
- Menos flexible en comparación con Gradle
Gradle
- Pros
- Muy flexible y potente
- Buen rendimiento de compilación
- Contras
- Menos documentación y soporte en comparación con Maven
- Curva de aprendizaje más pronunciada
Ant
- Pros
- Altamente configurable
- Contras
- Más complejo y menos automatizado
- Menos soporte comunitario
Nota
El equipo decidió usar Maven debido a su integración con Spring Boot y su amplia aceptación en la comunidad de desarrolladores Java.
Control de Versiones: Git
- Estado: aceptada
- Fecha: 2024-03-21
Contexto y Declaración del Problema
Necesitamos un sistema de control de versiones para manejar el desarrollo colaborativo.
Factores de Decisión
- Popularidad y soporte comunitario
- Facilidad de uso y aprendizaje
- Funcionalidades para el desarrollo colaborativo
Opciones Consideradas
- Git
- SVN (Subversion)
- Mercurial
Resultado de la Decisión
Opción elegida: "Git", porque es el sistema de control de versiones más popular, con un gran soporte comunitario y funcionalidades robustas para el desarrollo colaborativo.
Consecuencias Positivas
- Amplia adopción y soporte
- Funcionalidades avanzadas para el desarrollo colaborativo
- Facilidad de uso y aprendizaje
Consecuencias Negativas
- Puede ser complicado para usuarios no familiarizados con el control de versiones distribuidas
Pros y Contras de las Opciones
Git
- Pros
- Amplia adopción y soporte comunitario
- Funcionalidades avanzadas para el desarrollo colaborativo
- Facilidad de uso y aprendizaje
- Contras
- Puede ser complicado para usuarios no familiarizados con sistemas distribuidos
SVN (Subversion)
- Pros
- Sencillo de usar para desarrolladores individuales
- Buen soporte para grandes repositorios
- Contras
- Menos popular en comparación con Git
- Menos soporte para desarrollo distribuido
Mercurial
- Pros
- Buen rendimiento
- Sistema distribuido similar a Git
- Contras
- Menos popular en comparación con Git
- Menos soporte comunitario
Nota
El equipo decidió usar Git debido a su popularidad, amplio soporte comunitario y robustas funcionalidades para el desarrollo colaborativo.
Pruebas de Código: JUnit
- Estado: aceptada
- Fecha: 2024-03-21
Contexto y Declaración del Problema
Necesitamos asegurar la calidad del código mediante pruebas unitarias y de integración.
Factores de Decisión
- Popularidad y soporte comunitario
- Facilidad de uso e integración con Spring Boot
- Herramientas y funcionalidades disponibles
Opciones Consideradas
- JUnit
- TestNG
- Spock
Resultado de la Decisión
Opción elegida: "JUnit", porque es popular, fácil de usar e integra bien con Spring Boot.
Consecuencias Positivas
- Popularidad y soporte comunitario
- Facilidad de uso e integración con Spring Boot
- Herramientas y funcionalidades avanzadas
Consecuencias Negativas
- Puede requerir aprendizaje inicial para desarrolladores nuevos en pruebas
Pros y Contras de las Opciones
JUnit
- Pros
- Popularidad y soporte comunitario
- Facilidad de uso e integración con Spring Boot
- Herramientas y funcionalidades avanzadas
- Contras
- Puede requerir aprendizaje inicial para desarrolladores nuevos en pruebas
TestNG
- Pros
- Funcionalidades avanzadas de pruebas
- Buen soporte para pruebas de integración
- Contras
- Menos popular en comparación con JUnit
- Menor integración con herramientas de Spring Boot
Spock
- Pros
- Sintaxis de pruebas muy expresiva
- Soporte para pruebas de comportamiento
- Contras
- Menos popular en comparación con JUnit
- Menor soporte comunitario y documentación
Nota
El equipo decidió usar JUnit debido a su popularidad, facilidad de uso y fuerte integración con Spring Boot.
Framework de Desarrollo: Spring Boot
- Estado: aceptada
- Fecha: 2024-04-21
Contexto y Declaración del Problema
Se necesita un framework robusto y ampliamente utilizado para el desarrollo de aplicaciones Java.
Factores de Decisión
- Popularidad y soporte comunitario
- Facilidad de configuración
- Integración con otras tecnologías utilizadas en el proyecto
Opciones Consideradas
- Spring Boot
- Java EE
- Play Framework
Resultado de la Decisión
Opción elegida: "Spring Boot", porque ofrece facilidad de configuración, un ecosistema rico y es ampliamente utilizado en la industria.
Consecuencias Positivas
- Facilidad de configuración
- Amplio soporte comunitario
- Integración con otras tecnologías
Consecuencias Negativas
- Puede tener una curva de aprendizaje inicial para nuevos desarrolladores
Pros y Contras de las Opciones
Spring Boot
- Pros
- Facilidad de configuración
- Amplio soporte comunitario
- Integración con otras tecnologías
- Contras
- Curva de aprendizaje inicial para nuevos desarrolladores
Java EE
- Pros
- Estándar bien establecido
- Buen soporte para aplicaciones empresariales
- Contras
- Puede ser más pesado y complejo de configurar
- Menos flexible en comparación con Spring Boot
Play Framework
- Pros
- Buen rendimiento
- Arquitectura reactiva
- Contras
- Menos popular en comparación con Spring Boot
- Menor soporte comunitario
Nota
El equipo decidió usar Spring Boot debido a su facilidad de configuración, amplio soporte comunitario y rica integración con otras tecnologías.
Documentación de la API: Swagger/OpenAPI
- Estado: aceptada
- Fecha: 2024-04-21
Contexto y Declaración del Problema
Necesitamos documentar la API HTTP para facilitar su uso y mantenimiento.
Factores de Decisión
- Necesidad de documentación clara y accesible
- Integración con Spring Boot
- Popularidad y soporte comunitario
Opciones Consideradas
- Swagger/OpenAPI
- RAML
- API Blueprint
Resultado de la Decisión
Opción elegida: "Swagger/OpenAPI", porque proporciona una documentación clara y accesible, y se integra bien con Spring Boot.
Consecuencias Positivas
- Documentación clara y accesible
- Amplio soporte y popularidad
- Integración con Spring Boot
Consecuencias Negativas
- Puede requerir configuración adicional
Pros y Contras de las Opciones
Swagger/OpenAPI
- Pros
- Documentación clara y accesible
- Amplio soporte y popularidad
- Integración con Spring Boot
- Contras
- Puede requerir configuración adicional
RAML
- Pros
- Buenas herramientas de desarrollo
- Estructura modular
- Contras
- Menos popular en comparación con Swagger
- Menor soporte comunitario
API Blueprint
- Pros
- Sintaxis simple y fácil de aprender
- Contras
- Menos popular en comparación con Swagger
- Menor soporte comunitario y herramientas
Nota
El equipo decidió usar Swagger/OpenAPI debido a su capacidad para generar documentación clara y su integración con Spring Boot.
Usar MySQL para la Persistencia de Datos
- Estado: aceptada
- Fecha: 2024-05-01
Contexto y Declaración del Problema
Necesitamos elegir un sistema de gestión de bases de datos (DBMS) para persistir datos relacionados con vehículos, estancias en el aparcamiento, pagos y otras entidades. El DBMS debe proporcionar fiabilidad, escalabilidad y facilidad de integración con nuestra aplicación basada en Java.
Factores de Decisión
- Requisito de una base de datos relacional fiable y bien soportada
- Compatibilidad con Java y Spring Boot
- Disponibilidad de soporte comunitario y documentación
Opciones Consideradas
- MySQL
- PostgreSQL
- SQLite
Resultado de la Decisión
Opción elegida: "MySQL", porque ofrece un buen equilibrio entre fiabilidad, rendimiento y soporte comunitario. Además, se integra bien con Spring Boot a través de JPA/Hibernate.
Consecuencias Positivas
- Alta fiabilidad y cumplimiento de ACID
- Buen rendimiento para nuestra carga de trabajo esperada
- Gran comunidad y documentación exhaustiva
Consecuencias Negativas
- Características ligeramente menos avanzadas en comparación con PostgreSQL
- Requiere más recursos en comparación con bases de datos más ligeras como SQLite
Pros y Contras de las Opciones
MySQL
- Pros
- Fiable y ampliamente utilizado
- Buen rendimiento y escalabilidad
- Fuerte soporte comunitario y documentación
- Contras
- Características ligeramente menos avanzadas en comparación con PostgreSQL
PostgreSQL
- Pros
- Características avanzadas y extensiones
- Fuerte soporte para consultas y transacciones complejas
- Contras
- Mayor uso de recursos
- Curva de aprendizaje más pronunciada
SQLite
- Pros
- Ligero y fácil de configurar
- Uso mínimo de recursos
- Contras
- No adecuado para entornos de alta concurrencia
- Características limitadas en comparación con MySQL y PostgreSQL
Nota
El equipo decidió usar MySQL después de evaluar las opciones y considerar la carga de trabajo esperada y los requisitos de integración con Spring Boot.