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
- Cohesión: Cada clase tiene una sola responsabilidad.
- Reutilización: Es fácil reutilizar servicios independientes como
EmailServiceen otras partes del sistema. - Pruebas: Las clases pequeñas son más fáciles de probar.
- 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...