Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I have a C# library that's used by several executables. There's only a couple namespaces in the library, and I just noticed that one of the namespaces has quite a few classes in it. I've always avoided having too many classes in a single namespace because of categorization, and because subconsciously, I think it looks "prettier" to have a deeper hierarchy of namespaces.

My question is: does anyone else consider it a "code smell" when a namespace has many classes - even if the classes relate to each other? Would you put in a lot of effort to find nuances in the classes that allows for subcategorization?

share|improve this question
8  
If the classes belong in said namespace no. Design is subjective by its very nature so its hard to really say and is more a matter of preference as you already have identified. –  Chris Feb 3 '11 at 17:25
    
Whatecer StyleCop says is the law. I bet it will not like it. –  Job Feb 7 '11 at 19:48
1  
Define "quite a few". 10? 100? 1000? –  Eric King Feb 7 '11 at 20:05
add comment

4 Answers

up vote 5 down vote accepted

Not necessarily. If all the classes indeed belong to the category defined by the namespace, it's fine then.

What you can do is to look at the classes and reflect on the possibility of merging some of them. Could well be small groups of those classes support "family" functionality but were implemented separately for some historic reasons. Now when sufficient time has elapsed, a better composition might be possible.

share|improve this answer
add comment

This is fine. The primary reason to have namespaces is to avoid name collisions and only after this we should we think about logical scope, which more a matter of personal choice rather than rule. Of course some sensible rules are welcome. Nobody wants to scroll through 3k~4k classes in one namespace.

A good example is the std namespace in the C++ Standard Library which allows you to separate your own algorithms from the standard ones.

share|improve this answer
    
-1. Name collision is important, but conceptual grouping of classes it also important. –  umlcat Mar 14 '11 at 16:29
add comment

You should avoid having too many namespaces as this makes a library much harder to use and navigate for the programmer. Also, with many namespaces it can become a challenge for the designer to provide accurate names for each namespace and also to decide in which namespace a particular class should belong.

The simplest way forward is to put all the primary classes into a single namespace, tucking any advanced scenario classes into sub-namespaces; The .NET Framework does this all the time, see the System.Collections and System.Collections.Specialized for good examples of this practise.

With only one or two first level namespaces, your code will become much easier to navigate, with your advanced or specialized classes hidden away until the programmer is ready to discover such.

share|improve this answer
add comment

As long as they belong together and relate to one another there isn't a problem with having too many classes in a namespace.

Whether or not a class belongs in it's own separate namespace is a matter of personal preference.

What look more natural?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

It entirely depends on how you like to see and invoke your code.

Personally, I prefer separate namespaces only when I know there will be more than a single class belonging to it.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.