Используйте системные пространства имен для библиотек классов: хорошо или плохо - PullRequest
4 голосов
/ 24 августа 2009

Является ли хорошей идеей использовать «системные пространства имен» в моих библиотеках классов?

Пример:

namespace System.Web {
    public static class RequestExtensions {
        public static bool IsPost(this HttpRequest r) {
            return string.Compare(r.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase) == 0;
        }
    }
}

Преимущество: нет необходимости включать дополнительные предложения использования (особенно для методов расширения), поэтому все становится доступно сразу после добавления ссылки на библиотеку.

Лучшим примером является NUnitEx проект (который использует пространство имен NUnit).

Недостатки: потенциальные конфликты имен.

Ответы [ 5 ]

15 голосов
/ 24 августа 2009

Я должен поддержать всех остальных, кто говорит, что это ПЛОХАЯ идея. Пространства имен являются организационным инструментом на многих уровнях. Они не только позволяют вам повторно использовать идентификаторы для ваших собственных целей, не вступая в конфликт с другими компаниями, но также позволяют различным компаниям изолировать свой продукт от вашего или чьего-либо другого. Помещение кода в пространство имен System может очень запутать людей, использующих ваши типы.

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

4 голосов
/ 24 августа 2009

В руководствах по дизайну говорится о именовании пространства имен :

Общий формат имени пространства имен выглядит следующим образом:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

Например, Microsoft.WindowsMobile.DirectX.

Префикс имен пространств имен с именем компании, чтобы запретить пространства имен от разных компаний с одинаковым именем и префиксом.

Здесь нет места для повторного использования System или Microsoft.

3 голосов
/ 24 августа 2009

Очень, очень плохо. Это сбивает с толку, и вы должны делать это только в случае крайней необходимости (в некоторых случаях это необходимо).

Делайте это только тогда, когда это требуется на 100%, никогда не делайте это только для «удобства».

2 голосов
/ 24 августа 2009

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

0 голосов
/ 24 августа 2009

Использование системного пространства имен может затруднить кому-то подобрать ваш код и выяснить, что он делает. Например, если я беру новый C #, я часто заканчиваю поискать в Google такие вещи, как «System.Web.xyz», когда я чего-то не знаю.

В этом случае я, вероятно, не знал бы, что System.Web.RequestExtensions не был реальным членом пространства имен System.Web, поэтому я застрял в поиске несуществующего класса.

Так что, в принципе, я считаю, что вам нужно документально действительно хорошо или найти другое пространство имен.

...