DEV Community

Cover image for Single Responsibility Principle (SRP) - Pense como um vingador
Diego Linhares
Diego Linhares

Posted on • Updated on

Single Responsibility Principle (SRP) - Pense como um vingador

Introdução

O Princípio da Responsabilidade Única (SRP) é um dos princípios SOLID do design de software orientado a objetos. Popularizado por Robert C. Martin, ou Uncle Bob, o SRP nos diz que cada classe deve ter apenas uma "razão para mudar". Vamos explorar esse conceito usando o exemplo dos Vingadores.

Cada herói dos Vingadores tem uma habilidade única que define sua "especialidade". O Homem de Ferro é um gênio da tecnologia, Thor é um deus com poderes mágicos, e a Viúva Negra é uma espiã habilidosa.

Todas as ações de cada herói estão alinhadas com essa especialidade única:

# Homem de Ferro e sua especialidade em tecnologia
class HomemDeFerro
  def disparar_misseis
    puts "Disparando mísseis!"
  end

  def voar
    puts "Voando alto!"
  end
end

# Thor e seus poderes Asgardianos
class Thor
  def usar_martelo
    puts "Martelo lançado!"
  end

  def convocar_raio
    puts "Convocando um raio!"
  end
end

# Viúva Negra e sua habilidade em espionagem
class ViuvaNegra
  def espionar
    puts "Coletando informações secretas."
  end

  def lutar
    puts "Lutando habilmente."
  end
end
Enter fullscreen mode Exit fullscreen mode

Coesão no design de software e domínio de negócios

O design de software não é uma ciência exata onde você pode simplesmente contar "responsabilidades". O que importa é a coesão, que se refere a quão bem as partes de um sistema trabalham juntas para formar um todo unificado. Em um código coeso, cada classe ou módulo tem uma responsabilidade claramente definida e todas as suas funções e variáveis contribuem para essa responsabilidade.

A coesão também deve ser entendida no contexto do domínio de negócios. Por exemplo, todas as habilidades do Homem de Ferro fazem sentido dentro do contexto de ser um gênio da tecnologia. Se esse contexto mudar, o que era coeso pode de repente não ser mais.

class HomemDeFerro
  # ...
  # Adicionando uma nova habilidade defensiva :)
  def ativar_escudo
    puts "Ativando escudo de energia!"
  end
end
Enter fullscreen mode Exit fullscreen mode

Quando a coesão é perdida

Suponha que o Homem de Ferro ganhe a habilidade de prever o futuro. Isso seria uma violação do SRP, pois essa nova habilidade não tem relação com sua especialidade em tecnologia.

# Homem de Ferro perdendo a coesão
class HomemDeFerro
  # Aí ta troll. Isso é papel do Dr. Estranho :(
  def prever_o_futuro
    puts "Prevendo o futuro!"
  end
end
Enter fullscreen mode Exit fullscreen mode

Conclusão

O SRP serve como uma orientação para criar sistemas mais robustos e confiáveis. Adicionar habilidades ou tarefas não alinhadas com a responsabilidade única pode tornar o sistema menos coeso e mais difícil de gerenciar.

Ao refatorar seu código, pense como um Vingador: qual é a sua "especialidade", e como você pode tornar seu código mais coeso dentro desse contexto?

Top comments (3)

Collapse
 
iagocavalcante profile image
Iago Angelim Costa Cavalcante

Muito bom, um dos melhores artigos sobre o assunto que já li

Collapse
 
diegolinhares profile image
Diego Linhares

Valeu pelo feedback mano!
Em breve postarei mais sobre SOLID ;)

Collapse
 
oswaldolinhares profile image
Oswaldo Linhares

Então foi por violar o SRP que o homem de ferro morreu ao usar a manopla do infinito?

Tudo faz sentido agora! Excelente Post!