Encontrar nomes bons e precisos para as classes é notoriamente difícil. Feito corretamente, torna o código mais autodocumentado e fornece um vocabulário para raciocinar sobre o código em um nível mais alto de abstração.
As classes que implementam um determinado padrão de projeto podem receber um nome baseado no nome do padrão bem conhecido (por exemplo, FooFactory, FooFacade), e as classes que modelam diretamente os conceitos de domínio podem receber seus nomes do domínio do problema, mas e as outras classes? Existe algo como o dicionário de sinônimos de um programador que eu possa consultar quando estiver sem inspiração e quiser evitar o uso de nomes de classe genéricos (como FooHandler, FooProcessor, FooUtils e FooManager)?
Respostas:
Citarei algumas passagens dos Padrões de Implementação de Kent Beck:
Nome Simples da Superclasse
Nome da subclasse qualificada
Interface
Para uma discussão mais detalhada, compre o livro! Vale a pena! :)
fonte
Sempre vá para MyClassA, MyClassB - permite uma boa classificação alfa.
Estou brincando!
Esta é uma boa pergunta e algo que experimentei há não muito tempo. Eu estava reorganizando minha base de código no trabalho e estava tendo problemas para saber onde colocar o quê e como chamá-lo.
O verdadeiro problema?
Eu tive aulas fazendo muito. Se você tentar aderir ao princípio de responsabilidade única, tudo ficará bem melhor. Em vez de uma classe PrintHandler monolítica , você poderia dividi-la em PageHandler , PageFormatter (e assim por diante) e, em seguida, ter uma classe principal de impressora que reúne tudo.
Na minha reorganização, demorei, mas acabei armazenando muitos códigos duplicados, tornei minha base de código muito mais lógica e aprendi muito quando se trata de pensar antes de lançar um método extra em uma classe: D
No entanto, eu não recomendaria colocar coisas como nomes de padrões no nome da classe. A interface das classes deve tornar isso óbvio (como ocultar o construtor de um singleton). Não há nada de errado com o nome genérico, se a classe estiver servindo a um propósito genérico.
Boa sorte!
fonte
A excelente palestra de Josh Bloch sobre um bom design de API tem alguns bons conselhos:
Se o seu problema é como nomear classes internas expostas, talvez você deva consolidá-las em uma classe maior.
Se o seu problema é nomear uma classe que está fazendo muitas coisas diferentes, você deve considerar dividi-la em várias classes.
Se esse for um bom conselho para uma API pública, não fará mal a nenhuma outra classe.
fonte
Se você está preso a um nome, às vezes apenas dar a ele qualquer nome meio sensato com o compromisso de revisá-lo mais tarde é uma boa estratégia.
Não fique com a paralisia dos nomes. Sim, os nomes são muito importantes, mas não são importantes o suficiente para perder muito tempo com eles. Se você não consegue pensar em um bom nome em 10 minutos, siga em frente.
fonte
Se um bom nome não vier à mente, eu provavelmente questionaria se existe um problema mais profundo - a aula está servindo a um bom propósito? Se for, nomear deve ser bastante simples.
fonte
Se o seu "FooProcessor" realmente processa foos, então não hesite em dar esse nome só porque você já tem um BarProcessor, BazProcessor, etc. Em caso de dúvida, óbvio é melhor. Os outros desenvolvedores que precisam ler seu código podem não estar usando o mesmo dicionário de sinônimos que você.
Dito isso, mais especificidade não faria mal para este exemplo particular. "Processo" é uma palavra bastante ampla. É realmente um "FooUpdateProcessor" (que pode se tornar "FooUpdater"), por exemplo? Você não precisa ser muito "criativo" quanto à nomenclatura, mas se escreveu o código, provavelmente tem uma boa ideia do que ele faz ou não.
Finalmente, lembre-se de que o nome básico da classe não é tudo o que você e os leitores do seu código precisam continuar - geralmente há namespaces em jogo também. Isso geralmente pode dar aos leitores contexto suficiente para ver claramente para que serve sua classe, mesmo que seu nome seja bastante genérico.
fonte