Talvez um pouco irônico, mas como não consigo encontrar esta resposta em nenhum lugar pelo Google, por isso, para garantir que a Engenharia de Software tenha a resposta:
O que é um ajudante?
Eu vi o nome sendo usado em todos os lugares (nomes de módulos, nomes de classes, nomes de métodos), como se a semântica fosse profunda e significativa, mas no contexto da Ciência da Computação (embora eu não seja formado), eu ' nunca vi uma descrição ou definição em lugar algum!
É um padrão de design? É um algoritmo? Certa vez, trabalhei em um programa no qual o módulo e a classe eram chamados de algo como algo que ajuda (onde algo também era genérico) e prontamente o renomeei para algo que fazia sentido para mim, mas sinto que estou perdendo algo aqui!
design-patterns
algorithms
semantics
Aaron Hall
fonte
fonte
Respostas:
Uma classe Helper é um cheiro de código menos conhecido, em que um codificador identificou algumas operações diversas e comumente usadas e tentou torná-las reutilizáveis agrupando-as em um agrupamento não natural. Os desenvolvedores sucessivos entraram no projeto e não perceberam que a classe auxiliar existe e, consequentemente, reescreveram as mesmas operações comuns, ou até criaram mais classes Helper.
Mas, sério, o principal problema com as classes Helper é que elas geralmente são operações que agem em uma classe específica, o que obviamente significa em termos de OO que eles estão sofrendo de um caso agudo de Feature Envy . Essa falha em empacotar o comportamento com os dados nos quais atua é por isso que os desenvolvedores frequentemente (na minha experiência) não conseguem encontrá-lo.
Além disso, como você já identificou SomethingSomethingHelper é realmente um nome terrível. Não é descritivo e não dá uma idéia real de que tipo de operações a classe faz (ajuda?), O que também significa que não é óbvio ao adicionar novos comportamentos, independentemente de pertencerem ou não à classe Helper. Eu dividiria essas classes de acordo com o comportamento relacionado que agrupa logicamente e depois renomeia as novas classes para refletir o que elas fazem.
fonte
SomethingSomethingHelper
não é o nome real da classe. Quer se trate de um cheiro de código ou não, isso depende de quão específica é a classe auxiliar, pois classes auxiliares comoMath
essas não são de modo algum um cheiro de código.SomethingSomethingHelper
. Inferno, estou vendo uma classe agora nomeadaHelperMethods
no<company>.Helpers
espaço para nome. Para mim, umaHelper
classe está no mesmo balde que*Manager
.Helper
, e acho que é para desambiguá-lo de uma classe no .NET Framework com o mesmo nome. Eu consideraria*Helper
aceitável se*
fosse algo significativo.HelperMethods
é apenas uma falha de imaginação; deve haver pelo menos baldes conceituais específicos.do..while
loop em Python, que a linguagem não suporta (veja o segundo exemplo aqui ). Outra seria uma estrutura if / elif /.../ else, mas é necessário repetir um caso na parte superior e inferior. Se possível, eles devem ser tornados locais para essa função, e geralmente não são chamados de "auxiliares".Um auxiliar é uma classe ou método adicional inofensivo, desde que complemente um componente externo. Quando faz o contrário, indica um design incorreto porque o código foi excluído de sua autoridade, se houver alguma autoridade.
Aqui está um exemplo de um auxiliar inofensivo, eu uso um método chamado
FindRep
que conta o número de zeros à esquerda.O método auxiliar é muito simples, mas muito inconveniente para copiar e colar, e a estrutura não fornece nenhuma solução.
E aqui está um exemplo de um mau ajudante:
fonte
Minha empresa costumava usar a metodologia da classe Base / Helper, onde cada objeto teria duas classes. Você teria uma classe Person que continha todas as propriedades e definições da classe e uma classe PersonHelper que continha todos os métodos, instruções SQL e lógica que manipulavam a classe Person. Isso funcionou bem para nós, porque todos os nossos aplicativos usam instruções SQL para manipular dados e foi muito fácil encontrar e modificar as instruções SQL conforme necessário.
Desde então, seguimos em frente e agora colocamos tudo na classe Pessoa / Base. Paramos de usar a convenção de nomenclatura Helper porque queríamos ter menos arquivos em nossos projetos. Além disso, o tamanho de alguns nomes de classe estava ficando fora de controle. ri muito.
Não é um ótimo exemplo, mas você entendeu.
Não estou dizendo que usar a convenção de nomenclatura auxiliar é a solução perfeita, mas funcionou para nós por alguns anos.
fonte