Пространство имен Правило большого пальца
Существует ли общее практическое правило относительно того, сколько классов, интерфейсов и т. Д. Должно быть введено в данное пространство имен, прежде чем элементы будут в дальнейшем классифицированы в новом пространстве имен? Как лучшая практика или предпочтения сообщества? Или это все личные предпочтения?
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 ответов
Я не видел никакого практического правила ни в одном надежном источнике, но есть несколько общих предпочтений, которые я видел при работе с большинством разработчиков. Есть несколько вещей, которые помогут вам сделать пространства имен.
- Домен класса
- Это класс или интерфейс (я видел, что некоторые разработчики предпочитают пространства имен, такие как ShopApp.Model.Interfaces). Работает очень хорошо, если ваши интерфейсы - это какой-то сервис или контракт данных.
- У вас нет слишком глубоких пространств имен, достаточно 3 (.). Больше чем это может стать раздражающим.
- Будьте открыты, чтобы реорганизовать пространство имен, если в любое время вы почувствуете, что оно стало нелогичным или сложным в управлении.
- Не создавайте пространства имен только ради этого.
Удачного кодирования!!!
При создании библиотеки или модуля, как правило, лучше использовать только одно пространство имен, поскольку основная функция пространства имен заключается в том, чтобы избежать конфликтов имен, и вы можете контролировать, какие имена присваиваются классам и интерфейсам.
Я не знаю ни одного эмпирического правила для количества предметов, но такие правила в любом случае имеют тенденцию быть чрезмерно обобщенным мусором. Убедитесь, что существует логическая связь между элементами в одном пространстве имен. Если пространство имен становится слишком тесным (маловероятно, я надеюсь), или вещи в пространстве имен в лучшем случае слабо связаны, рассмотрите возможность разбиения его на несколько пространств имен.
Я бы сказал, что иерархия пространства имен должна основываться только на соображениях дизайна и иерархии модели /API.
Если одно пространство имен содержит огромное количество не связанных между собой классов, переосмыслите свой дизайн.
Вопреки сказанному Эндрю, я бы не стал беспокоиться о пространствах имен, содержащих несколько классов - хотя, конечно, верно, что иерархия должна быть настолько детализированной, насколько это необходимо для выражения дизайна.
С другой стороны, я считаю совершенно разумным, чтобы пространство имен содержало только один очень специальный класс или, возможно, очень маленький набор типов, один из которых кодирует задачу, а другие предоставляют API (исключения, перечисления для аргументов...).
В качестве примера возьмем System.Text.RegularExpressions
(в.NET). Конечно, немного больше, чем один класс, но только справедливо.
Обычно считается плохой формой иметь небольшое количество классов в пространстве имен. Я всегда объяснял это тем, что многие пространства имен приводят к путанице.
Я бы посоветовал вам разбить классы на логические пространства имен, как можно более разумные и практичные. Однако, если у вас останется только один или два класса на пространство имен, возможно, вы слишком сильно раскололесь и должны подумать о консолидации.