Полезное правило пространства имен

Существует ли общее практическое правило относительно того, сколько классов, интерфейсов и т. Д. Должно входить в данное пространство имен, прежде чем элементы должны быть классифицированы в новом пространстве имен? Нравится ли это передовой практике или предпочтениям сообщества? Или это все личные предпочтения?

namespace: MyExample.Namespace
 interface1
 interface2
 interface3
 interface4
 interface5
 interface6
 interface7
 interface8
 interface9

Or

namespace: MyExample.Namespace.Group1
 interface1
 interface2
 interface3
namespace: MyExample.Namespace.Group2
 interface4
 interface5
 interface6
namespace: MyExample.Namespace.Group3
 interface7
 interface8
 interface9

person Frank V    schedule 10.01.2009    source источник


Ответы (5)


Я не встречал никаких практических правил ни в одном надежном источнике, но есть несколько общих предпочтений, которые я не видел, работая с большинством разработчиков. Есть несколько вещей, которые помогут вам создать пространства имен.

  1. Домен класса
  2. Это класс или интерфейс (я видел, как некоторые разработчики предпочитают пространства имен, такие как ShopApp.Model.Interfaces). Работает очень хорошо, если ваши интерфейсы представляют собой контракт на обслуживание или передачу данных.
  3. Не используйте слишком глубокие пространства имен, достаточно 3 (.). Более того, это может раздражать.
  4. Будьте открыты для реорганизации пространства имен, если в любой момент вы почувствуете, что оно стало нелогичным или трудно управляемым.
  5. Не создавайте пространства имен только ради этого.

Удачного кодирования !!!

person Perpetualcoder    schedule 10.01.2009
comment
Хороший ответ. Еще одна вещь, о которой следует помнить, - это то, что №4 может быть проблематичным, если вы работаете с существующей библиотекой, поэтому убедитесь, что вы правильно поняли это с первого раза, если у вас есть возможность. ;) - person Steve S; 11.01.2009

При создании библиотеки или модуля, как правило, лучше использовать только одно пространство имен, поскольку основная функция пространства имен состоит в том, чтобы избежать конфликтов имен, и у вас есть контроль над тем, какие имена присваиваются классам и интерфейсам.

person Alex B    schedule 10.01.2009

Я не знаю ни одного практического правила для количества элементов, но такие правила в любом случае, как правило, представляют собой чрезмерно обобщенный мусор. Убедитесь, что между элементами в одном пространстве имен существует логическая связь. Если пространство имен становится слишком переполненным (что маловероятно, я надеюсь) или элементы в пространстве имен в лучшем случае слабо связаны, подумайте о том, чтобы разбить его на несколько пространств имен.

person Steve S    schedule 10.01.2009

Я бы сказал, что иерархия пространств имен должна определяться только соображениями дизайна и иерархии модели / API.

Если одно пространство имен содержит огромное количество несвязанных классов, пересмотрите свой дизайн.

Вопреки тому, что сказал Эндрю, я бы не беспокоился о пространствах имен, содержащих несколько классов - хотя, конечно, верно, что иерархия должна быть настолько детализированной, насколько это необходимо для выражения дизайна.

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

В качестве примера возьмем System.Text.RegularExpressions (в .NET). Конечно, чуть больше одного класса, но всего лишь.

person Konrad Rudolph    schedule 10.01.2009

Обычно считается дурным тоном иметь небольшое количество классов в пространстве имен. Я всегда объяснял это тем, что многие пространства имен приводят к путанице.

Я бы посоветовал вам разбить классы на логические пространства имен, чтобы они были как можно более разумными и практичными. Однако, если вы в конечном итоге получите только один или два класса на пространство имен, вы можете слишком сильно расколоться и вам следует подумать о консолидации.

person Andrew Hare    schedule 10.01.2009
comment
«Обычно считается дурным тоном» - кем? Это кажется весьма спорным и отнюдь не общим. Я никогда об этом не слышал. - person Konrad Rudolph; 11.01.2009
comment
Это то, на что FxCop всегда жалуется - это почти все, что мне нужно, чтобы поддержать меня :) - person Andrew Hare; 11.01.2009
comment
Хотя Microsoft не является универсальным, особенно в очень общей области пространств имен; почти все языки программирования не принадлежат Microsoft; Кроме того, IMHO, количество классов внутри пространства имен - это не то, что должно оправдывать его существование, но есть другие причины - person Sebastian Mach; 20.06.2011