Пространство имен Правило большого пальца

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

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

Или же

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

5 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам