Arquitectura Clean al Spring boot
1. Què és l'Arquitectura Clean?
L'Arquitectura Clean és una manera d'organitzar el codi perquè:
- El domini siga independent de frameworks
- Les regles de negoci no depenguen de la base de dades ni de Spring
- El codi siga fàcil de mantindre, provar i escalar
Es basa en capes concèntriques, on les dependències sempre apunten cap a dins.
Emb decidit utilitzar aquesta arquitectura perque vam pensar que seria la milllor i més comoda per a treballar en grup sense tindre una caos d'arxius, o arxius de 500 linies son molt complexos de modificar per a un company que entra desde 0 al backend de spring
2. Visió general de les capes
Tenim estes capes principals:
- Presentation: entrada i eixida de dades (API REST, DTOs)
- Application: casos d'ús (use cases)
- Domain: nucli del sistema (entitats i regles)
- Infrastructure: implementacions tècniques (JPA, repositoris, controllers)
A més tenim la capa security, aquesta capa la hem decidit crear per a introduir el cors i el control del token d'oodo. Ja que considerabem que aixi era la forma més neta d'implementaro i facil d'ampliar a futur
3. Capa Domain (Nucli del sistema)
org.padalustro.domain
3.1 Entities
domain/entities
Conté les entitats del negoci :
video_catalegaquesta es la tabla principal del projecte, a on es guarden les dade i metadades del videoscategoriaaquesta tabla son les categories que te cada videoserieaquesta tabla són les series, que servixen per agrupar els videos per llistesestudiaquesta tabla són els estudis que aporten el videos
Les seguents tables són creades per a implementacións a futur a l'aplicació, al tindreles ja creades amb la bd adapta, ens sera molt més sencill implementar les seguents millores
usuariaquesta tabla fara referencia a l'usuari d'odooperfilaquesta tabla servira per a gestionar els diversos perfils que pot tindre un usuari, si són menors d'edad, etc.historialaquesta tabla la vam preparar per a tindre un historial dels ids del videos vists per un perfil, i cuan van ser vists.- valoracio_video aquesta tabla va ser preparada per a un servei de valoracións a on el perfils podien donar la seva opinio sobre un video, i puntuarlo
3.2 Repositories (Ports)
domain/repository
Asi tenim els repositoris:
VideoCatalegRepositoryEstudiRepositorySerieRepositoryCategoriaRepository
Són interfícies, no implementacions.
3.3 Exceptions
domain/exceptions
Aço son control de errors per saber que esta pasan cuan ens dona un error:
VideoCatalegNotFoundException
Aquesta classe s'utilitza quan es vol accedir o eliminarun VideoCataleg que NO existeix en la base de dades. * GlobalExceptionHandler
Aquest mètode s'executa automaticament quan
es llança una VideoCatalegNotFoundException
en qualsevol punt del projecte.
4. Capa Application (Casos d'ús)
org.padalustro.application.usecase
Ací està la lògica d'aplicació, organitzada per agregats:
Exemple: Video Catàleg
usecase/Cataleg
GetAllVideoCatalegUseCaseGetVideoCatalegByIdUseCaseSaveVideoCatalegUseCaseUpdateVideoCatalegUseCaseDeleteVideoCatalegUseCase
Cada Use Case:
- Fa una única acció
- Depén només de repositoris del domini
- No coneix controllers ni JPA
Exemple conceptual:
El mateix patró es repetix en:
CategorySerieEstudi
5. Capa Infrastructure (Detalls tècnics)
org.padalustro.infrastructure
Esta capa implementa els detalls concrets.
5.1 Repository Implementations
infrastructure/repository
VideoCatalegRepositoryImplCategoriaRepositoryImplSerieRepositoryImpl
Implementen les interfícies del domini utilitzant JPA. Asi el teniu si li voleu donar una mira (https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html)
5.2 JPA Repositories
infrastructure/repository/jpa
VideoCatalegJpaRepositoryCategoriaJpaRepository
Són repositoris Spring Data (JpaRepository).
Només s'usen dins de la infraestructura.
6. Capa Presentation
org.padalustro.presentation
6.1 Controllers
infrastructure/controller
VideoCatalegControllerCategoryControllerSerieControllerStudiController
Funcions:
- Rebre peticions HTTP
- Validar dades
- Cridar els Use Cases
- Retornar respostes HTTP
6.2 DTOs
presentation/DTO
VideoCatalegDTOCategoriaDTOSerieDTOEstudiDTO
Servixen per:
- No exposar entitats del domini
- Controlar què entra i què ix de l'API
7. Seguretat
org.padalustro.security
SecurityConfigCorsConfig
És una capa transversal que afecta Presentation i Infrastructure, però no toca Domain ni Application.
8. Punt d'entrada de l'aplicació
CatalegBackend.javaIndex.java
Arranquen Spring Boot i configuren el context.
9. Flux complet d'una petició
Exemple: obtenir un vídeo pel seu ID
HTTP Request
↓
VideoCatalegController
↓
GetVideoCatalegByIdUseCase
↓
VideoCatalegRepository (interface)
↓
VideoCatalegRepositoryImpl
↓
JPA Repository
↓
Base de dades
10. Conclusió
Arquitectura Clean:
- Domini net i independent
- Casos d'ús clars
- Infraestructura desacoblada
- API REST ben separada