Nivel 1 · 20 min
Principios SOLID
SOLID es un conjunto de cinco principios de diseño orientado a objetos que guían la construcción de software mantenible, extensible y testeable. Formulados por Robert Martin, son la base del buen diseño en Java, C#, Python y cualquier lenguaje OO.
SRP y OCP
El Principio de Responsabilidad Única (SRP) establece que una clase debe tener una sola razón para cambiar. Si una clase maneja lógica de negocio, persistencia y formateo, cualquier cambio en cualquier área la afecta. El Principio Abierto/Cerrado (OCP) dice que las entidades deben estar abiertas a extensión pero cerradas a modificación — agregás comportamiento nuevo sin tocar código existente, generalmente via herencia o composición.
LSP, ISP y DIP
El Principio de Sustitución de Liskov (LSP) establece que los subtipos deben ser sustituibles por sus tipos base sin romper el programa. El Principio de Segregación de Interfaces (ISP) dice que los clientes no deben depender de métodos que no usan — preferís interfaces pequeñas y específicas. El Principio de Inversión de Dependencias (DIP) establece que los módulos de alto nivel no deben depender de módulos de bajo nivel — ambos deben depender de abstracciones (interfaces), no de implementaciones concretas.
SOLID en la práctica
SOLID no es un dogma — es una guía. Aplicar SRP agresivamente puede llevar a demasiadas clases pequeñas. OCP tiene sentido cuando anticipás variación en un área. LSP es fundamental para colecciones polimórficas. ISP evita que implementaciones se vean forzadas a hacer cosas vacías. DIP es la base de la inyección de dependencias. La clave es saber cuándo aplicar cada principio según el contexto.
Code example
// DIP: alto nivel depende de abstraccion
interface OrderRepository { Order findById(String id); }
class OrderService { // depende de interface, no de JPA
private final OrderRepository repo;
OrderService(OrderRepository repo) { this.repo = repo; }
}