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:

  1. Teste — Uma classe com uma responsabilidade terá muito menos casos de teste
  2. Menor acoplamento — menos funcionalidade em uma única classe terá menos dependências
  3. 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:

Book.cs

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.

--

--

Jones Roberto Nuzzi

Associado | Arquitetura de Sistemas na Riza Asset, Sempre focado em desenvolvimento de sistemas para o mercado financeiro, com mais de 15 anos de experiência!