Peguei o termo smurf nomeando daqui (número 21). Para salvar alguém que não conhece o problema, a nomeação Smurf é o ato de prefixar um monte de classes, variáveis etc. relacionadas com um prefixo comum, para que você acabe com "a SmurfAccountView
passa a SmurfAccountDTO
para SmurfAccountController
", etc.
A solução que geralmente ouvi sobre isso é criar um espaço para nome de smurf e soltar os prefixos de smurf. Isso geralmente me serviu bem, mas estou com dois problemas.
Estou trabalhando com uma biblioteca com uma
Configuration
classe. Poderia ter sido chamado,WartmongerConfiguration
mas está no espaço de nomes do Wartmonger, por isso é chamadoConfiguration
. Da mesma forma, tenho umaConfiguration
classe que poderia ser chamadaSmurfConfiguration
, mas é no espaço para nome Smurf, portanto seria redundante. Há lugares no meu código em queSmurf.Configuration
aparece ao ladoWartmonger.Configuration
e digitar nomes totalmente qualificados é desajeitado e torna o código menos legível. Seria melhor lidar com aeSmurfConfiguration
(se fosse meu código e não uma biblioteca)WartmongerConfiguration
.Eu tenho uma classe chamada
Service
no meu namespace Smurf que poderia ter sido chamadaSmurfService
.Service
é uma fachada no topo de uma complexa biblioteca Smurf que executa tarefas Smurf.SmurfService
parece um nome melhor, porqueService
sem o prefixo Smurf é incrivelmente genérico. Eu posso aceitar queSmurfService
já era um nome genérico, inútil, e tirar smurf apenas tornou isso mais aparente. Mas poderia ter sido nomeadoRunner
,Launcher
etc, e ainda me "sentiria melhor" comoSmurfLauncher
porque não sei o queLauncher
faz, mas sei o queSmurfLauncher
faz. Você poderia argumentar que o que umSmurf.Launcher
faz deve ser tão aparente quanto umSmurf.SmurfLauncher
, mas eu pude ver o `Smurf.Launcher sendo algum tipo de classe relacionada à instalação, em vez de uma classe que lança smurfs.
Se houver uma maneira aberta e fechada de lidar com qualquer uma dessas opções, isso seria ótimo. Caso contrário, quais são algumas práticas comuns para atenuar seu aborrecimento?
SmurfJob
ou executa tecnicamente para ser consistente com o idioma da documentação do Smurf. À luz disso e das outras respostas, vou mudar o nome SmurfService
para SmurfJobRunner
. Parece que o número 1 não possui uma melhor resolução independente de idioma, como eu esperava. Eu posso ver casos em que ir SmurfConfiguration
seria a decisão certa, mas no meu caso, acho que Configuration
é melhor mesmo com o incômodo de Wartmonger.Configuration
.
Smurf.Configuration
e se SmurfConfiguration
sentir diferente? Certamente não é o char extra, é? (Reduza para Config
se o comprimento é o problema.) Smurf.Configuration
Há algum problema que SmurfConfiguration
não existe?
Smurf.Launcher
Smurfs lançamento, ou ele lançarSmurfJob
s? Talvez pudesse ser chamadoSmurf.JobLauncher
?