PHP e o Princípio da Responsabilidade Única

O primeiro dos cinco princípios que compõe o SOLID, um conjunto de boas práticas de design orientado a objetos de Robert Martin (Uncle Bob).

Alan Willms
Jul 5, 2015 · 3 min read

Uma classe só deveria ter um motivo para mudar — Uncle Bob

Segundo Bob, isso significa que uma classe só deveria ter um eixo de mudança. “Motivo para mudar”, “eixo de mudança”, esses termos não ajudam muito, não é?

Exemplos em PHP

Neste primeiro exemplo temos uma classe “Pedido”, que implementa o padrão ActiveRecord. Não entrarei na discussão sobre o uso de ActiveRecord versus o uso de Repositórios segundo o Domain-Driven Design, então apenas assuma que a classe herda métodos para persistência de dados de sua classe-mãe.

  1. O método getValorTotal() talvez seja alterado se a regra de negócio mudar, se um único item puder ser cancelado, ou o cálculo do desconto não for mais ou mesmo — a responsabilidade principal é calcular o valor total pedido.
  2. O método getValorTotalFormatado() pode mudar se introduzirem outros idiomas ou outras moedas, se optarem por usar tags HTML, ou mesmo se o cliente quiser outra forma de representação — esse método tem a responsabilidade de representar um valor monetário.
  1. Acrescentar um rodapé à mensagem enviada;
  2. Enviar a mensagem.

Detectando Violações Automaticamente

Depois de conhecer esse princípio, sempre tomamos cuidado ao escrever novas classes e métodos, mas e quanto ao código legado? Existe uma maneira de varrer todo o repositório em busca de classes ou métodos com muitas responsabilidades?

Referências

Tableless

Um lugar para ler e discutir sobre desenvolvimento, design…

Tableless

Um lugar para ler e discutir sobre desenvolvimento, design, web semântica, back-end e outros assuntos relacionados a web. Se você quiser publicar artigos conosco, envie um email: medium[at]tableless.com.br ou *clique no link* http://bit.ly/escreva-tableless-medium

Alan Willms

Written by

Software development nerd. In 💙 with Ruby, PHP, JavaScript, Crystal, and other techy stuff.

Tableless

Um lugar para ler e discutir sobre desenvolvimento, design, web semântica, back-end e outros assuntos relacionados a web. Se você quiser publicar artigos conosco, envie um email: medium[at]tableless.com.br ou *clique no link* http://bit.ly/escreva-tableless-medium