Clean Code e o princípio de reutização / fazer apenas uma coisa

21/02/2019

0

Fazer uma função muito genérica afeta o princípio da reutilização?
Por exemplo, já vi sistema com módulos diferentes ex: Financeiro, Contas Receber, Contas Pagar que utilizava apenas uma função para resolver determinado problema, e era distinguido por parâmetros que mudava o comportamento, pois em um módulo precisava receber o resultado dessa função de uma forma e o outro módulo de outra. E isso muitas vezes acabava sendo prejudicial a longo prazo, pois o sistema era grande, e ao dar manutenção, um programador poderia não ter uma analise de impacto clara quanto aquilo.
Há um limite para a reutilização?
Valeu pessoal.
Lucas Rodrigues

Lucas Rodrigues

Responder

Post mais votado

21/02/2019

Olá Lucas,

Este tipo de reutilização que você menciona vai totalmente contra os princípios da orientação a objetos. Se bem que talvez, mas talvez, na programação procedural ele fosse útil, na orientação a objetos ela só complica.

Preste atenção no texto que vou te dar uma super dica...

A reutilização é um termo muito ruim, por exemplo, Ctrl+C e Ctrl+V também pode ser uma reutilização de código, só que fica duplicado.

Na programação, o termo chave é "REUSABILIDADE", que denota, não somente reutilizar um código mas saber como reutilizar...

Se na linguagem procedural, a modularizarão foi um avanço, porque um único código em um método podia ser chamado em vários pontos do programa, na orientação a objetos a agregação foi um novo avanço para a reusabilidade.

Ao invés de fazer uma função com um parâmetro que faz coisas diferentes, faça várias classes com método do mesmo nome só que em cada classe você troca o conteúdo do método. Veja um exemplo (em linguagem genérica) para salvarLog em vários formatos:

class salvarFormato()
{
     metodo abstrato salvar();
}

class salvarFormatoTxt herda de salvarFormato()
{
     metodo salvar()
     {
          //todos os comandos para salvar em txt
     }
}

class salvarNoBanco herda de salvarFormato()
{
     metodo salvar()
     {
          //todos os comandos para salvar no banco
     }
}


class Log
{
      Atributo salvamento tipo salvarFormato;

      metodo SalvarLog()
     {
           s.salvar();
     }
}


agora note a diferença:



c= new Log;

c.salvamento = new  salvarFormatoTxt ;
c.SalvarLog(); //Salvou log no formato txt;

c.salvamento = new salvarNoBanco;
c.SalvarLog(); // Salvou no banco;


Aparentemente tem muito mais código, e é claro que dependendo da linguagem vai gerar muito código (java e C#) ou pouquíssimo código (python). O que vai dar diferença nesta reusabilidade é em dois momentos: (1) na hora de chamar a função pois o código ficou muito mais entendível, e (2) na hora da manutenção, pois quando era parametros, toda vez que surge um novo parâmetro o código espade com mais ifs, porém aqui não, aqui quando surge um novo parametro, na verdade você cria uma nova classe, deixando o código mais objetivo.

Espero ter esclarecido.

Hélio Devmedia

Hélio Devmedia
Responder

Mais Posts

22/02/2019

Lucas Rodrigues

Entendi, obrigado!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar