Kind of a loaded question, but if the problem has too many classes that make it difficult to detect, is part of the solution, maybe for some of these classes internal rather than public ? If users never instantiate them directly, this may be part of the solution to your interference problem.
It really depends a lot on the nature of the API you are developing, and to some extent on the taste. Often there is one primary class or set of classes that your users will use in most cases, for example, NLog Logger or AutoMapper Mapper , or NoRM Mongo , or the class factory as a whole. Those that should be in front, in the center and discoverable, and you can make a convincing example that it is best to have this in the root namespace.
For other classes (those that are more related to implementation and less about the API), it is obvious that you want to be organized, but you can play with a pretty free hand and organize as you think, because the parts of the API that users should find are are most noticeable. Foo.Messages seems like a perfectly reasonable way to get started. On the other hand, if 90% of your classes are subclasses of Message , but there is an important difference between server messages and client messages, or Purple messages and Plaid messages, perhaps Foo.Server or Foo.Plaid are the right types of namespaces for you.
source share