Cómo aplicar SOLID en proyectos reales sin complicarte
Cómo aplicar SOLID en proyectos reales sin complicarte
Introducción: Aplicar SOLID en proyectos reales no tiene por qué ser complejo. En este artículo aprenderás a usar estos principios en código cotidiano, con ejemplos simples que cualquier desarrollador puede implementar. Mencionaremos Pulsosoft una vez para mantener la coherencia editorial.
1. Single Responsibility: la base de todo
Un componente, una responsabilidad. Cuando una clase cambia por más de un motivo, se rompe este principio.
Ejemplo práctico
public class UserEmailService {
private final EmailSender sender;
public UserEmailService(EmailSender sender) {
this.sender = sender;
}
public void sendWelcomeEmail(User user) {
sender.send(user.getEmail(), "Bienvenido", "Gracias por unirte");
}
}Buenas prácticas
Divide responsabilidades y usa servicios pequeños, fáciles de testear y reemplazar.
Errores comunes
Clases gigantes que manejan lógica, persistencia, validaciones y notificaciones al mismo tiempo.
2. Open/Closed: abierto a extender, cerrado a modificar
Evita romper lo que ya funciona. Extiende, no modifiques.
Ejemplo práctico
public interface Discount {
double apply(double price);
}
public class ChristmasDiscount implements Discount {
public double apply(double price) {
return price * 0.8;
}
}
Buenas prácticas
Usar interfaces y polimorfismo evita modificar clases críticas cuando necesitas nuevos comportamientos.
Errores comunes
Agregar múltiples if para manejar diferentes comportamientos en la misma clase.
3. Liskov: sustituibilidad sin dolores
Una subclase debe comportarse igual que su padre, sin sorpresas.
Ejemplo práctico
public interface Notification {
void send(String message);
}
public class EmailNotification implements Notification {
public void send(String message) {
// enviar email
}
}Buenas prácticas
Evita sobrescribir métodos para cambiar completamente el comportamiento esperado.
Errores comunes
Herencia mal usada donde la subclase no respeta la lógica del contrato.
4. Interface Segregation: interfaces pequeñas, proyectos grandes
Las interfaces deben ser específicas; nada de métodos obligatorios que no se usan.
Ejemplo práctico
public interface ReadRepository {
T findById(Long id);
}
public interface WriteRepository {
T save(T entity);
} Buenas prácticas
Divide contratos grandes en interfaces pequeñas y enfocadas.
Errores comunes
Interfaces gigantes con métodos que nadie necesita.
5. Dependency Inversion: dependencias hacia abstracciones
Evita acoplarte directamente a implementaciones. Usa interfaces y contenedores de inversión de control.
Ejemplo práctico
public class OrderService {
private final Payment payment;
public OrderService(Payment payment) {
this.payment = payment;
}
public void process() {
payment.pay();
}
}Buenas prácticas
Inyecta dependencias desde afuera, no las crees dentro de la clase.
Errores comunes
Instanciar servicios internos con new, rompiendo pruebas y flexibilidad.
Conclusión
Aplicar SOLID en proyectos reales no requiere sobreingeniería. Con pasos simples puedes mejorar tu código, hacerlo más mantenible y más fácil de testear. Pulsosoft busca que desarrolladores como tú construyan software limpio y escalable.

Escrito por Giovanny Benitez
Más de esta categoría

Condicionales en Java: cómo tu programa toma decisiones
Condicionales en Java: cómo tu programa toma decisiones Todo programa útil toma decisiones. ¿El usuario es mayor de edad? ¿El saldo es suficiente? ¿El campo está vacío? Para responder esas preguntas, Java usa condicionales. ¿Qué es un condicional? Un condicional...

Condicionales en Java: cómo tu programa toma decisiones
Condicionales en Java: cómo tu programa toma decisiones Todo programa útil toma decisiones. ¿El usuario es mayor de edad? ¿El saldo es suficiente? ¿El campo está vacío? Para responder esas preguntas, Java usa condicionales. ¿Qué es un condicional? Un condicional...

Condicionales en Java: cómo tu programa toma decisiones
Condicionales en Java: cómo tu programa toma decisiones Todo programa útil toma decisiones. ¿El usuario es mayor de edad? ¿El saldo es suficiente? ¿El campo está vacío? Para responder esas preguntas, Java usa condicionales. ¿Qué es un condicional? Un condicional...

0 comentarios