C #: пространство имен и структура классов - PullRequest
3 голосов
/ 25 августа 2010

Исходя из Java, я привык к структуре пакета (com.domain.appname.tier). Теперь я начал работать над проектом C #, где все проекты имеют глубину 1:
, т.е. * 1002.* ProjectA
- Utilities.cs
- Validation.cs
- ....
- Extraction.cs

и все файлы cs имеют длину около 2500 строк ...

Как вы упорядочиваете свои классы и пространства имен в C #, чтобы это имело смысл, и сохранял исходный файл в логическом размере?

Ответы [ 7 ]

9 голосов
/ 25 августа 2010

Так же, как я представляю, что вы делаете в Java:

  • Несколько (<10?) Классов в каждом пространстве имен, с пространствами имен, организованными в иерархию </li>
  • Одинкласс на исходный файл
  • Один или два экрана текста на исходный файл

Проект, к которому вы присоединились, не очень структурирован и не является хорошим примером хорошего источникаКод организации.

3 голосов
/ 25 августа 2010

Аналогичным образом в Java вам просто нужно приложить некоторые усилия :) Некоторые разработчики на C #, особенно с VB-фоном, обычно пишут оооочень классы и помещают их на верхний уровень.

2 голосов
/ 25 августа 2010

Я бы предложил прочитать рекомендации Microsoft по этому вопросу:

Руководство по разработке библиотек классов

В частности, вы должны взглянуть на следующий раздел:

Руководство по именам

Даже если вы не пишете библиотеку классов, вы все равно можете получить много пользы от этих рекомендаций. FxCop (или Code Analysis, как его называют сейчас) помечает многие конструкции, которые не соответствуют этим рекомендациям.

1 голос
/ 25 августа 2010

Вот пример того, как я организую свои решения, которые отражают структуру пространства имен.

alt text

Проект имеет пространство имен по умолчанию, в данном случае это CompanyName.ProjectName Исходные файлы логически организованы в структуру каталогов. В этом примере мои конструкторы действий WF4 организованы под Действия в папке с именем Дизайнеры .

Способ работы VS заключается в том, что когда вы создаете каталоги в проекте, вы также создаете пространства имен . Таким образом, если бы я добавил новый дизайнер действий под названием «Foo» в показанный каталог, его пространство имен было бы

"CompanyName.ProjectName.Activities.Designers"

Visual studio использует пространство имен по умолчанию, а затем использует структуру папок для определения пространства имен для определенного файла. Конечно, после того, как файл создан, и вы переместите файл, он не будет автоматически реорганизован. Но система работает очень хорошо не только для управления пространствами имен для классов, но и для организации файлов.

1 голос
/ 25 августа 2010

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

Затем обновите пространства имен классов в папке, чтобы отразить это изменение, Resharper сделает это за вас, и более новые версии VS, вероятно, тоже сделают это.

Наконец (если вы можете), я бы начал разбивать классы на меньшие, более управляемые размеры.

0 голосов
/ 25 августа 2010

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

0 голосов
/ 25 августа 2010

Так же, как и в Java.

В Java пакеты организовывают классы в физических каталогах.Я не уверен в этом, но компилятор даже поддерживает это соглашение IIRC.В C # вы не обязаны организовывать свои классы в отдельные каталоги, которые соответствуют вашим пространствам имен, но это очень распространенное соглашение.

Говоря о пространствах имен в C #, они не следуют com.domain.appname.tier соглашение, но использовать формат Company.Product.Tier .

Способ реорганизации больших классов зависит от приложения.Это упражнение по применению правил ООП, которое применимо как к Java, так и к C #.

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