Codigo limpio y refactorización
El bajo acoplamiento y la alta cohesión son principios fundamentales del diseño de software que ayudan a crear sistemas más modulares, flexibles y mantenibles:
- Bajo acoplamiento: Las clases o módulos deben depender lo menos posible entre sí. Esto facilita cambios en una parte del sistema sin afectar otras.
- Alta cohesión: Una clase o módulo debe tener un propósito bien definido y agrupar funcionalidades relacionadas. Esto mejora la claridad y la reutilización.
Ejemplo Malo: Alto Acoplamiento y Baja Cohesión
1public class OrderService { 2 public void processOrder(String productName, int quantity, String paymentMethod) { 3 System.out.println("Processing order for " + productName); 4 System.out.println("Quantity: " + quantity); 5 6 // Pago 7 if (paymentMethod.equals("credit")) { 8 System.out.println("Processing credit card payment..."); 9 } else if (paymentMethod.equals("paypal")) { 10 System.out.println("Processing PayPal payment..."); 11 } 12 } 13}
Problemas en los Ejemplos Malos
- Alto acoplamiento:
OrderServiceestá directamente acoplado a los detalles del método de pago.- Si se agrega un nuevo método de pago, hay que modificar la lógica interna de
OrderService.
- Baja cohesión:
OrderServicemaneja múltiples responsabilidades: gestionar pedidos y procesar pagos, violando el principio de responsabilidad única (SRP).
Beneficios del Código Corregido
-
Bajo Acoplamiento:
OrderServiceno está directamente vinculado a un método de pago específico.- Nuevos métodos de pago se pueden agregar fácilmente implementando la interfaz o clase base
PaymentProcessor.
-
Alta Cohesión: Cada clase tiene una única responsabilidad:
OrderService: Procesa pedidos.PaymentProcessory sus subclases: Gestionan métodos de pago.
-
Extensibilidad: Agregar nuevos métodos de pago no requiere modificar
OrderService, siguiendo el principio Open/Closed. -
Mantenibilidad: El diseño modular facilita el mantenimiento y las pruebas unitarias.
Ejemplo Corregido: Bajo Acoplamiento y Alta Cohesión
1public interface PaymentProcessor { 2 void processPayment(); 3} 4 5public class CreditCardProcessor implements PaymentProcessor { 6 public void processPayment() { 7 System.out.println("Processing credit card payment..."); 8 } 9} 10 11public class PayPalProcessor implements PaymentProcessor { 12 public void processPayment() { 13 System.out.println("Processing PayPal payment..."); 14 } 15} 16 17public class OrderService { 18 public void processOrder(String productName, int quantity, PaymentProcessor paymentProcessor) { 19 System.out.println("Processing order for " + productName); 20 System.out.println("Quantity: " + quantity); 21 paymentProcessor.processPayment(); 22 } 23} 24// Uso 25OrderService orderService = new OrderService(); 26PaymentProcessor paymentProcessor = new CreditCardProcessor(); 27orderService.processOrder("Laptop", 1, paymentProcessor);
- Loading...