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.

  1. 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

  1. 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

  1. 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>

  1. 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
}

  1. 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
}

  1. 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());
    }
}

  1. 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:

/**
 * Servei per gestionar els usuaris.
 */
@Service
public class UserService {
    // Codi del servei
}

  1. 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

Mòdul 2: Conceptes bàsics de Spring Boot

Mòdul 3: Construint serveis web RESTful

Mòdul 4: Accés a dades amb Spring Boot

Mòdul 5: Seguretat a Spring Boot

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ó

Mòdul 10: Millors pràctiques i consells

© Copyright 2024. Tots els drets reservats