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.)
Vorbis codec:
Project.Vorbis.VorbisEncoder
Project.Vorbis.VorbisDecoder
Project.Vorbis.VorbisFrame
Project.Vorbis.VorbisChannel
Project.Vorbis.VorbisParameters
ATRAC3+ codec:
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