The project that raised this question is in C#, but it could apply to most languages that use namespaces.
I've read many things on good naming practices:
"Don't prefix your class names with their namespace name. That's just creating unnecessary duplication." (Smurf naming)
"One of the uses for namespaces is separating code and name collisions. Use them that way."
"When I'm reading code from a project and come across a class name, I want to know exactly which class is being referenced and not have to check which namespaces have been imported."
What I haven't been able to figure out is the best way to name classes in namespaces that perform similar tasks, but are completely independent from each other.
For example, let's say I have an audio codec library. The code in each codec namespace is not dependent on the others, but they all depend on a namespace containing common, generic code.
I might have classes like these. (Don't read too much into the names, they're only examples.)
Project.Vorbis.VorbisEncoder Project.Vorbis.VorbisDecoder Project.Vorbis.VorbisFrame Project.Vorbis.VorbisChannel Project.Vorbis.VorbisParameters
Project.Atrac3P.Atrac3PEncoder Project.Atrac3P.Atrac3PDecoder Project.Atrac3P.Atrac3PFrame Project.Atrac3P.Atrac3PChannel Project.Atrac3P.Atrac3PParameters
IMA ADPCM codec:
Project.ImaAdpcm.ImaAdpcmEncoder Project.ImaAdpcm.ImaAdpcmDecoder Project.ImaAdpcm.ImaAdpcmFrame Project.ImaAdpcm.ImaAdpcmChannel Project.ImaAdpcm.ImaAdpcmParameters
Is this good design, or is it too repetitive? I don't like repeating the namespace name in the class name, but I don't know if that's preferable to duplicating class names like this:
Project.Vorbis.Encoder Project.Atrac3P.Encoder Project.ImaAdpcm.Encoder