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
@ControllerAdviceper 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
