Немного субъективно, на этот вопрос нет «окончательного, правильного» ответа.
Вот как я это делаю, имея в виду, что сборки могут совместно использоваться проектами.
Считайте, что у меня есть название компании FooBar (+1 для кого-нибудь за оригинальность?)
Все ваши сборки начинаются с этого корневого пространства имен. У нас много общих сборок.
Такие вещи, как:
- MVC (UI) HTML Helpers. Они идут в одной сборке.
- Универсальный репозиторий. Шаблон репозитория, реализованный с использованием дженериков, для повторного использования.
- Методы расширения LINQ (пейджинг, общий синтаксический сахарный завод). Опять же, они идут в одной сборке.
Итак, наша Вселенная пространства имен FooBar может выглядеть так:
FooBar
|
---- FooBar.Common.Mvc
|
---- FooBar.Common.DataAccess
|
---- FooBar.Common.Linq
|
---- FooBar.ProjectOne (ASP.NET MVC Web Application)
| |
| --- FooBar.ProjectOne.Repository (makes use of FooBar.Common.DataAccess)
| |
| --- FooBar.ProjectOne.WebMvc (makes use of FooBar.Common.Mvc)
|
---- FooBar.ProjectTwo (WPF Application)
|
--- FooBar.ProjectTwo.Repository (makes use of FooBar.Common.DataAccess)
|
--- FooBar.ProjectTwo.BindingServices (makes use of FooBar.Common.Linq)
Знаешь, что я имею в виду?
Настройте свои пространства имен таким образом, чтобы он чувствовал себя правильно, помещая общую логику в общие области на основе гетерогенного пространства имен.
Вы найдете множество компаний с несколькими общими проектами, которые следуют этой тенденции.
Вы думаете о «подпространствах имен» правильно (по моему мнению).