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.
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
Curtir tópico
+ 0
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:
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.
Hélio Devmedia
Responder
Mais Posts
Clique aqui para fazer login e interagir na Comunidade :)