Os Princípios do SOLID — SRP Princípio da responsabilidade única
Links dos artigos detalhados:
- [S] Single-responsiblity principle — Princípio da responsabilidade única
- [O] Open-closed principle — Princípio aberto-fechado
- [L ] Liskov substitution principle — Princípio da substituição de Liskov
- [I] Interface segregation principle — Princípio da Segregação de interface
- [D ] Dependency Inversion Principle — Princípio da inversão de dependência
SRP — Princípio da responsabilidade única
Na programação, o Princípio da responsabilidade única declara que cada módulo ou classe deve ter responsabilidade sobre uma única parte da funcionalidade fornecida pelo software.
Você pode ter ouvido a citação: “ Faça uma coisa e faça bem “.
Isso se refere ao princípio da responsabilidade única.
No artigo citado acima, Robert C. Martin define uma responsabilidade como um “motivo para mudar” e conclui que uma classe ou módulo deve ter um e apenas um motivo para ser alterado.
Como esse princípio nos ajuda a criar um software melhor? Vamos ver alguns dos seus benefícios:
- Teste — Uma classe com uma responsabilidade terá muito menos casos de teste
- Menor acoplamento — menos funcionalidade em uma única classe terá menos dependências
- Organização — Classes menores e bem organizadas são mais fáceis de pesquisar do que as classes monolíticas
Tome, por exemplo, uma classe para representar um livro simples:
Nesse código, armazenamos o nome, autor e texto associados a uma instância de um livro . Vamos agora adicionar alguns métodos para consultar o texto:
Agora, nossa classe Livro funciona bem e podemos armazenar quantos livros quisermos em nosso aplicativo. Mas, de que adianta armazenar as informações se não podemos enviar o texto para o console e lê-lo?
Vamos criar agora um método de impressão na classe Book.cs:
Ao adicionar esse novo método o código, no entanto, viola o princípio de responsabilidade única descrito anteriormente. Para aplicar o SRP da forma correta, devemos implementar uma classe separada que se preocupe apenas com a impressão de nossos textos:
Agora nós não somente desenvolvemos uma classe que isenta “Book.cs” de tarefas de impressão, mas também podemos reaproveitar nossa classe BookPrinter para enviar nosso texto para outras mídias.
Seja email, log ou qualquer outra coisa, temos uma classe separada dedicada a essa preocupação.