Как правильно использовать пространство имен C #? - PullRequest
4 голосов
/ 14 октября 2010

Я пришел из Java-фона и вижу, что многие говорят пространства имен = пакеты, но, глядя на доступный код, мне не кажется, что люди используют пространства имен так, как они использовали пакеты.В настоящее время я работаю над библиотекой DLL для управления всеми своими данными доступа к базе данных для совместного использования между двумя приложениями Windows.До сих пор я создавал пакеты, как и для Java, поэтому у меня есть подпространства имен Domain, Services, DAO (я называю это Repositories) вне моего верхнего уровня.Это правильно?Кто-нибудь написал лучшую практику для пространств имен?Я предполагаю, что это, вероятно, очень незначительный момент, но я не хочу идти, так сказать, против зерна.

Ответы [ 4 ]

11 голосов
/ 14 октября 2010

Немного субъективно, на этот вопрос нет «окончательного, правильного» ответа.

Вот как я это делаю, имея в виду, что сборки могут совместно использоваться проектами.

Считайте, что у меня есть название компании 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)

Знаешь, что я имею в виду?

Настройте свои пространства имен таким образом, чтобы он чувствовал себя правильно, помещая общую логику в общие области на основе гетерогенного пространства имен.

Вы найдете множество компаний с несколькими общими проектами, которые следуют этой тенденции.

Вы думаете о «подпространствах имен» правильно (по моему мнению).

4 голосов
/ 14 октября 2010

Лучшим руководством, вероятно, являются Рекомендации по именованию пространств имен в Рекомендации по разработке библиотек классов в MSDN.

В основном говорится, что вы должны использовать:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

Что будет переводиться как:

FooCompany.BarProduct.Baz
0 голосов
/ 14 октября 2010

Одним из распространенных случаев использования является CompanyName.System.Module, например. LogicStudio.ERP.GeneralLedger

0 голосов
/ 14 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...