Glossario¶
Definizioni rapide dei termini usati nel progetto.
- ADR
- Architecture Decision Record. Documento che registra una decisione architetturale con contesto, alternative e conseguenze.
- Always-valid object
- Pattern di design in cui un'entità non può mai trovarsi in uno stato inconsistente: le invarianti sono enforced dal costruttore e dai metodi mutatori. Vedi step-05.
- C4 Model
- Notazione gerarchica per diagrammare architetture software a 4 livelli: Context, Container, Component, Code.
- DTO
- Data Transfer Object. Oggetto usato per trasportare dati tra layer. Nel progetto sono sempre
recordimmutabili. - Flyway
- Tool di migration versionate. Eseguito all'avvio applica gli script SQL in
db/migration/. - JaCoCo
- Java Code Coverage. Misura la copertura dei test. Nel progetto è configurato per fallire il build sotto il 70%.
- JPA
- Jakarta Persistence API. Standard Java per ORM. Implementazione: Hibernate 6.
- MockMvc
- API di Spring Test per testare controller MVC senza avviare un server HTTP reale.
- N+1 problem
- Anti-pattern JPA in cui caricare N entità innesca N query aggiuntive per le associazioni. Mitigato con
FetchType.LAZYesplicito + fetch join quando serve. - Optimistic locking
- Concorrenza basata su
@Version: due update concorrenti generanoOptimisticLockingFailureException. - ProblemDetail
- Standard IETF (RFC 7807) per rappresentare errori HTTP in JSON. Vedi step-06.
- Records
- Feature Java (stabile da 16) che genera classi immutabili con costruttore, getter,
equals/hashCode/toStringautomatici. - Service Connection
- Feature Spring Boot 3.1+:
@ServiceConnectionsu un@ContainerTestcontainers fa risolvere automaticamente le proprietà di connessione, niente più@DynamicPropertySource. - Slice test
- Test che carica solo una parte del contesto Spring (
@WebMvcTest,@DataJpaTest) per essere veloce e focalizzato. - State machine
- Modello che enumera stati e transizioni valide. Implementata nell'enum
TaskStatus+ il metodoTask#changeStatus. - Testcontainers
- Libreria che avvia container Docker effimeri durante i test (es. PostgreSQL reale invece di H2).
- Virtual threads
- Thread leggeri gestiti dalla JVM (Project Loom, stabili da Java 21). Ottimi per workload I/O-bound. Abilitati nel progetto via
spring.threads.virtual.enabled=true.