SOLID – Single Responsibility Principle (SRP)

SOLID – Single Responsibility Principle (SRP)

O Single Responsibility Principle (SRP) ou Princípio da Responsabilidade Única é o primeiro e um dos mais importantes princípios da orientação a objetos (OOP).

O princípio tem como objetivo atingir as classes e suas responsabilidades dentro do sistema, é um dos mais fáceis de se entender e aplicar e tem como premissa a seguinte afirmativa:

"A class should have one, and only one, reason to change"

“Uma classe deve ter ume apenas um, motivo para ser modificada”

Se uma classe só deve ter um motivo para ser modificada, certamente ela só deve ter uma única responsabilidade, logo:

Cada responsabilidade deve ser uma classe, porque uma responsabilidade é um eixo de mudança.

Veja esta classe:

Não foi fornecido texto alternativo para esta imagem

Aqui temos uma classe, que tem uma série de responsabilidades estas que não são inerentes a ela:

  • Validar Cliente;
  • Calcular Imposto;
  • Salvar (Persistir, seja banco ou API);
  • Imprimir;
  • Enviar por e-mail;

Se ela tem cinco responsabilidades ela tem cinco motivos para ser modificada. Essa quebra de responsabilidades pode gerar uma série de dores de cabeça.

Vamos supor que o método EnviarPorEmail() necessitasse ser alterado e um bug não identificado tenha sido publicado em produção.

Teríamos um cenário drástico, pois toda a estrutura da classe, e do processo, foi comprometida, o sistema deixaria de emitir notas fiscais por conta de um bug no envio de e-mail.

Além de gerar problemas graves, este tipo de acoplamento traz complexidade ao desenvolver testes além de deixa-los menos eficazes. Quando se trabalha com o tipo de arquitetura acima, tem-se a falsa impressão de que o sistema está sendo construído de forma prática e simples, pois se tem poucas classes para se dar manutenção, mas, quando elas começam a se expandir, e o sistema começa a ganhar tempo de vida, é que vemos como o sistema ficou muito mais complexo e de difícil de dar manutenção.

Quando trabalhamos com SRP podemos ter o sentimento de estarmos criando muitas classes para pouco uso, mas quando as funcionalidades do sistema crescem, podemos perceber que a expansão nada mais é do que criar novas classes nos lugares corretos e conecta-las de forma coesa. Sempre crie um sistema pensando que ele pode crescer em um momento.

Aplicando o SRP:

Não foi fornecido texto alternativo para esta imagem

Quais ganhos tivemos aplicando SRP na classe?

  • Facilidade de manutenção e evolução do código;
  • Código limpo e de fácil entendimento;
  • Facilidade para desenvolvimento de testes;
  • Redução do acoplamento;
  • Complexidade reduzida;
  • Coesão das classes;

A quantidade de benefícios que tivemos com um simples refatoração é enorme, não temos como negar a necessidade de aplicarmos o SRP em nossas aplicações. Como disse as aplicações crescem "tem vida própria", com o tempo quando tiver que voltar a dar manutenção e ver esse desacoplamento vai se agradecer :)

Mantenha esse princípio sempre fresco na memoria, se tiver que escolher apenas um escolha o SRP.

Nos próximos artigos falarei um pouco mais sobre outros princípios do SOLID.

Referências:

É isso aí. E, se me permite acrescentar, isso é a expressão, no conceito SOLID, de uma das duas coisas que, na minha opinião, são o santo graal do desenvolvimento: alta coesão e baixo acoplamento. No caso do SOLID, o SRP está ligado à alta coesão, mas isso é algo que vai além da OOP, inclusive. Serve para qualquer estilo...

Entre para ver ou adicionar um comentário

Outras pessoas também visualizaram

Conferir tópicos