Должен ли класс иметь то же имя, что и пространство имен?

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

Проблема в том, что пространство имен будет называться Fusion.User, но тогда потребуется класс в этом пространстве имен, который имеет смысл вызывать User.

Должен ли у вас быть класс с тем же именем, что и пространство имен? Или я использую неправильный подход здесь?


person Peter Bridger    schedule 26.11.2009    source источник


Ответы (5)


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

Насколько я вижу, у вас есть 2 варианта:

  1. Назовите свое пространство имен по-другому, например. Fusion.Безопасность
  2. Используйте суффикс для имени класса, указывающий его цель, например. UserDTO, UserAction и т. д.
person Andrey Adamovich    schedule 26.11.2009
comment
Мне нравится предложение "Fusion.Security" - возможно, мое мышление было слишком узким - person Peter Bridger; 26.11.2009

Пространство имен — Fusion.User
Полное имя класса будет Fusion.User.User

Рекомендуется, чтобы они были разными, потому что

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

    с помощью Fusion;
    пространство имен xyz {
    общедоступный тест класса
    {
    User.User userObject {get;set;}
    }
    }
    Так что лучшим вариантом было бы использовать разные имена

person Prahlad    schedule 26.11.2009

Бывают случаи, когда использование одного и того же имени может вызвать проблемы. Первое, что сразу приходит на ум, — это использование службы WCF. Когда я недавно сделал это в классе под названием «someBehaviour» в пространстве имен «companyName.someBehaviour», чтобы использовать «MyService», компилятор выругался, заявив, что MyService не существует в пространстве имен someBehaviour. Изменение имени класса на другое (и гораздо более полезное) решило проблему и позволило мне скомпилировать сборку.

person ZombieSheep    schedule 26.11.2009


Я бы, наверное, назвал пространство имен «пользовательские задачи», чтобы избежать путаницы. Вам придется регулярно квалифицировать внутренний класс, используя пространство имен, чтобы не запутать компилятор.

person Andrew    schedule 26.11.2009