Clean Code e o princípio de reutização / fazer apenas uma coisa
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.
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
Curtidas 0
Melhor post
Hélio Devmedia
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:
agora note a diferença:
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.
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.
GOSTEI 2
Mais Respostas
Lucas Rodrigues
21/02/2019
Entendi, obrigado!
GOSTEI 0