I pulled the term smurf naming from here (number 21). To save anyone not familiar the trouble, Smurf naming is the act of prefixing a bunch of related classes, variables, etc with a common prefix so you end up with "a SmurfAccountView passes a SmurfAccountDTO to the SmurfAccountController", etc.
The solution I've generally heard to this is to make a smurf namespace and drop the smurf prefixes. This has generally served me well, but I'm running into two problems.
I'm working with a library with a
Configurationclass. It could have been calledWartmongerConfigurationbut it's in the Wartmonger namespace, so it's just calledConfiguration. I likewise have aConfigurationclass which could be calledSmurfConfiguration, but it is in the Smurf namespace so that would be redundant. There are places in my code whereSmurf.Configurationappears alongsideWartmonger.Configurationand typing out fully qualified names is clunky and makes the code less readable. It would be nicer to deal with aSmurfConfigurationand (if it was my code and not a library)WartmongerConfiguration.I have a class called
Servicein my Smurf namespace which could have been calledSmurfService.Serviceis a facade on top of a complex Smurf library which runs Smurf jobs.SmurfServiceseems like a better name becauseServicewithout the Smurf prefix is so incredibly generic. I can accept thatSmurfServicewas already a generic, useless name and taking away smurf merely made this more apparent. But it could have been namedRunner,Launcher, etc and it would still "feel better" to me asSmurfLauncherbecause I don't know what aLauncherdoes, but I know what aSmurfLauncherdoes. You could argue that what aSmurf.Launcherdoes should be just as apparent as aSmurf.SmurfLauncher, but I could see `Smurf.Launcher being some kind of class related to setup rather than a class that launches smurfs.
If there is an open and shut way to deal with either of these that would be great. If not, what are some common practices to mitigate their annoyance?
Smurf.Launcherlaunch smurfs, or does it launchSmurfJobs? Perhaps it could be calledSmurf.JobLauncher?SmurfJobs, or technically runs them to be consistent with the language of the Smurf documentation. In light of that and the other answers, I am going to renameSmurfServicetoSmurfJobRunner. It seems number 1 has no language agnostic best resolution as I expected. I can see instances where going withSmurfConfigurationwould be the right call, but in my case I thinkConfigurationis best even with the hassle ofWartmonger.Configuration.Smurf.ConfigurationandSmurfConfigurationfeel different? Surely it's not the extra char, is it? (Shorten toConfigif length is the problem.) DoesSmurf.Configurationhave any problems thatSmurfConfigurationdoesn't?