Codigo limpio y refactorización

Las clases largas violan el principio de responsabilidad única (SRP), acumulando múltiples responsabilidades en una sola clase. Esto las hace difíciles de leer, probar, mantener y extender. Un diseño más limpio implica dividir la funcionalidad en clases más pequeñas y cohesivas.


Ejemplo Malo: Clase Larga

1import java.util.ArrayList;
2import java.util.List;
3
4public class UserManager {
5    private String name;
6    private String email;
7    private List<String> logs = new ArrayList<>();
8
9    public UserManager(String name, String email) {
10        this.name = name;
11        this.email = email;
12    }
13
14    public void addLog(String log) {
15        logs.add(log);
16    }
17
18    public void printLogs() {
19        System.out.println("Logs: " + logs);
20    }
21
22    public void sendWelcomeEmail() {
23        System.out.println("Sending email to: " + email);
24    }
25
26    public void validateEmail() {
27        if (!email.contains("@")) {
28            throw new IllegalArgumentException("Invalid email address");
29        }
30    }
31
32    public void generateReport() {
33        System.out.println("Generating report for user: " + name);
34    }
35}

Ejemplo Corregido: Clases Cohesivas

Beneficios de la Corrección

  1. Cohesión: Cada clase tiene una sola responsabilidad.
  2. Reutilización: Es fácil reutilizar servicios independientes como EmailService en otras partes del sistema.
  3. Pruebas: Las clases pequeñas son más fáciles de probar.
  4. Mantenibilidad: El código es más comprensible y los cambios son menos propensos a generar errores colaterales.
1public class User {
2    private String name;
3    private String email;
4
5    public User(String name, String email) {
6        this.name = name;
7        this.email = email;
8    }
9
10    public String getName() {
11        return name;
12    }
13
14    public String getEmail() {
15        return email;
16    }
17}
18
19public class Logger {
20    private List<String> logs = new ArrayList<>();
21
22    public void addLog(String log) {
23        logs.add(log);
24    }
25
26    public void printLogs() {
27        System.out.println("Logs: " + logs);
28    }
29}
30
31public class EmailService {
32    public void sendWelcomeEmail(String email) {
33        System.out.println("Sending email to: " + email);
34    }
35}
36
37public class ReportService {
38    public void generateReport(String userName) {
39        System.out.println("Generating report for user: " + userName);
40    }
41}
  • Loading...