SOLID: princípios para código limpo e sustentável
Os princípios SOLID oferecem um guia prático para projetar sistemas orientados a objetos mais resistentes a mudanças e mais fáceis de manter. A sigla representa cinco princípios:
- Single Responsibility Principle (SRP) — cada módulo ou classe deve ter uma única responsabilidade. Se uma classe tem mais de uma razão para mudar, considere separar responsabilidades.
- Open/Closed Principle (OCP) — entidades de software (classes, módulos, funções) devem estar abertas para extensão, mas fechadas para modificação. Use abstrações e extensões para adicionar comportamento sem alterar código existente.
- Liskov Substitution Principle (LSP) — objetos de uma subclasse devem poder substituir objetos da superclasse sem alterar o comportamento esperado. Evite quebra de contrato ao especializar tipos.
- Interface Segregation Principle (ISP) — prefira várias interfaces específicas ao invés de uma interface única e genérica. Consumidores não devem ser forçados a depender de métodos que não usam.
- Dependency Inversion Principle (DIP) — dependendo de abstrações, não de implementações. Injetar dependências e programar contra contratos melhora testabilidade e modularidade.
Aplicação prática
Em projetos legados, comece aplicando SRP em classes grandes: identifique responsabilidades e extraia serviços. Use testes automatizados antes de refatorar. Para OCP e DIP, introduza interfaces e injeção de dependência gradualmente.
Exemplo curto (pseudo-Java)
interface Notifier { void notify(String msg); }
class EmailNotifier implements Notifier { /* envia email */ }
class SmsNotifier implements Notifier { /* envia sms */ }
class OrderProcessor {
private Notifier notifier;
OrderProcessor(Notifier notifier){ this.notifier = notifier; }
void process(Order o){ /* ... */ notifier.notify("Pedido processado"); }
}
Ao depender da interface Notifier, OrderProcessor não precisa conhecer implementações concretas — segue DIP e facilita testes.
Conclusão
SOLID não é uma receita rígida, mas um conjunto de princípios que ajudam a tomar decisões de arquitetura melhores. Use-os como guia e adapte-os ao contexto do projeto.
Se quiser, posso transformar este post no formato do template e adicionar metadados adicionais (tags, leitura estimada) e documentação para transformar rapidamente outros posts.