En aquest tema, explorarem les millors pràctiques per desenvolupar aplicacions amb Spring Boot. Aquestes pràctiques t'ajudaran a escriure codi més net, mantenible i eficient, així com a evitar problemes comuns que poden sorgir durant el desenvolupament.
- Estructura del Projecte
1.1. Segueix una estructura de projecte clara
- Organitza el codi per capes: Separa les capes de controladors, serveis i repositoris.
- Utilitza paquets significatius: Agrupa les classes en paquets que reflecteixin la seva funcionalitat.
Exemple d'estructura de projecte:
src └── main ├── java │ └── com │ └── exemple │ ├── controller │ ├── service │ ├── repository │ └── model └── resources ├── static ├── templates └── application.properties
- Configuració
2.1. Utilitza fitxers de configuració externs
- application.properties o application.yml: Emmagatzema la configuració de l'aplicació en aquests fitxers per facilitar la gestió i el canvi de configuracions sense recompilar el codi.
Exemple de application.properties
:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret
2.2. Utilitza perfils de configuració
- Perfils: Defineix diferents perfils per a entorns de desenvolupament, proves i producció.
Exemple de perfils:
# application-dev.properties spring.datasource.url=jdbc:mysql://localhost:3306/devdb # application-prod.properties spring.datasource.url=jdbc:mysql://localhost:3306/proddb
- Gestió de Dependències
3.1. Utilitza dependències mínimes
- Evita dependències innecessàries: Inclou només les dependències que realment necessites per evitar inflar l'aplicació i possibles conflictes.
Exemple de pom.xml
:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Altres dependències necessàries --> </dependencies>
- Injecció de Dependències
4.1. Utilitza la injecció de dependències constructor
- Constructor: Prefereix la injecció de dependències a través del constructor per facilitar les proves i la immutabilitat.
Exemple:
@Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } // Mètodes del servei }
- Gestió d'Errors
5.1. Gestiona les excepcions de manera centralitzada
- Controladors d'excepcions: Utilitza
@ControllerAdvice
per gestionar les excepcions de manera centralitzada.
Exemple:
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND); } // Altres gestors d'excepcions }
- Proves
6.1. Escriu proves unitàries i d'integració
- JUnit i Mockito: Utilitza aquestes eines per escriure proves unitàries i d'integració per assegurar-te que el teu codi funciona correctament.
Exemple de prova unitària:
@RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @MockBean private UserRepository userRepository; @Test public void testFindUserById() { User user = new User(1L, "John Doe"); Mockito.when(userRepository.findById(1L)).thenReturn(Optional.of(user)); User found = userService.findUserById(1L); assertEquals("John Doe", found.getName()); } }
- Documentació
7.1. Documenta el teu codi
- Comentaris i JavaDocs: Escriu comentaris i documentació JavaDoc per explicar la funcionalitat del teu codi.
Exemple de JavaDoc:
- Rendiment
8.1. Optimitza el rendiment
- Actuator: Utilitza Spring Boot Actuator per monitoritzar i optimitzar el rendiment de l'aplicació.
Exemple de dependència Actuator:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Conclusió
Seguint aquestes millors pràctiques, podràs desenvolupar aplicacions Spring Boot més robustes, mantenibles i eficients. Recorda que la clau és mantenir el codi net, ben estructurat i fàcil de gestionar. A mesura que avancis en el desenvolupament, continua aplicant aquestes pràctiques per assegurar-te que el teu projecte es manté en bon estat.
Curs de Spring Boot
Mòdul 1: Introducció a Spring Boot
- Què és Spring Boot?
- Configuració del teu entorn de desenvolupament
- Creant la teva primera aplicació Spring Boot
- Entenent l'estructura del projecte Spring Boot
Mòdul 2: Conceptes bàsics de Spring Boot
- Anotacions de Spring Boot
- Injecció de dependències a Spring Boot
- Configuració de Spring Boot
- Propietats de Spring Boot
Mòdul 3: Construint serveis web RESTful
- Introducció als serveis web RESTful
- Creant controladors REST
- Gestionant mètodes HTTP
- Gestió d'excepcions en REST
Mòdul 4: Accés a dades amb Spring Boot
- Introducció a Spring Data JPA
- Configuració de fonts de dades
- Creant entitats JPA
- Utilitzant repositoris de Spring Data
- Mètodes de consulta a Spring Data JPA
Mòdul 5: Seguretat a Spring Boot
- Introducció a Spring Security
- Configuració de Spring Security
- Autenticació i autorització d'usuaris
- Implementant autenticació JWT
Mòdul 6: Proves a Spring Boot
Mòdul 7: Funcions avançades de Spring Boot
Mòdul 8: Desplegant aplicacions Spring Boot
Mòdul 9: Rendiment i monitorització
- Optimització del rendiment
- Monitorització amb Spring Boot Actuator
- Utilitzant Prometheus i Grafana
- Gestió de registres i logs