SOLID Padrões de Projeto Responsabilidade Única

SOLID Padrões de Projeto

Nesta série de artigos serão abordados os princípios de SOLID.

SOLID, São boas práticas no desenvolvimento de software com o objetivo de tornar o nosso software mais legível e de fácil manutenção.

Estes  princípios, foram difundidos por Robert C. Martin ou mais conhecido como Tio Bob (Robert Martin)

Os princípios de SOLID  são muito bons para refatoração e manutenção do nosso código.

O primeiro que vamos tratar vai ser: O Single Responsability

S = Single responsability este princípio é o que trata da responsabilidade única de uma classe.

  • Toda classe deve ter uma única responsabilidade
  • Toda classe deve ter apenas um motivo para mudar.

Vamos ver um exemplo na prática de como isso funciona em PHP

Temos uma classe page Para representar páginas

class Page {
  private $title;

   function __construct($title) {
      $this->setTitle($title);
  }
  
  function getTitle() 
    return $this->title;
  
  function setTitle($title)
     $this->title = $title;
  
  function  formatJson($title)
    return json_encode($this->getTitle);
}

Está classe sabe como representar o título da página e ela também tem um método que formata o conteúdo do título em JSON. A classe parece ok certo?, mas vamos pensar que o título também vai ser exibido to em outros formatos, isto já traria outras mudanças para a classe Page apesar de ser uma classe pequena, mas e se ela tiver mais propriedades? Com certeza isso já demonstra que a classe está incluindo responsabilidades além do que ela deve implementar.

Para solucionarmos está situação, vamos usar o princípio da responsabilidade única e vamos criar uma nova classe que vai ficar responsável pela exibição dos conteúdo em formato JSON.

class Page {   
  private $title;    
  
  function __construct($title) {     
    $this->setTitle($title);   
  }   
  
  public function getTitle()      
    return $this->title;   
  
  public function setTitle($title)      
    $this->title = $title;
}

class JsonFormater {
   
    public function format (Page $page) {
      return json_encode($page->getTitle());
    }
}

Desta forma fica mais fácil para criarmos outros formatos que serão responsáveis pela formatação do conteúdo do título. Se nós precisarmos exibir em formato XML nós podemos criar uma nova classe que irá ser responsável exclusivamente por isto.

Pode ser trabalhoso no princípio ou as vezes não parecer tão óbvio esse tipo de alteração, mas desenvolver desde princípio seguindo este padrão irá melhorar bastante a clareza do nosso software.

Siga e compartilhe:
error

Deixe um comentário

Enter Captcha Here : *

Reload Image