Префикс / суффикс для классов - PullRequest
3 голосов
/ 13 апреля 2009

Когда вы пишете приложение, которое будет иметь огромное количество классов, используете ли вы префиксы / суффиксы для имен классов? Или я должен просто полагаться на пространства имен, которые я уже определил?

В моем случае у меня есть классы вроде:

Blur
Contrast
Sharpen
Invert
...

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

Есть идеи?

Ответы [ 8 ]

24 голосов
/ 13 апреля 2009

Пространства имен были изобретены именно для решения этой проблемы. Используйте их.

11 голосов
/ 13 апреля 2009

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

7 голосов
/ 13 апреля 2009

Избегайте префиксов или суффиксов классов, если:

  • Это интерфейс: IFilter
  • Вам необходимо сообщить, что он участвует в схеме: GaussianBlurStrategy
  • (из marc_s) Вы создаете пользовательское исключение: ImageDoesNotSupportFilterTypeException
  • Иногда для связи, если что-то является абстрактным базовым классом: FilterBase

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

EDIT

Согласно комментарию Джона Б. суффикс пользовательских делегатов с Handler является обычным (FilterExecutedHandler(object sender, FilterEventArgs e);). Хотя объявление делегата само по себе не является классом, оно может вызвать конфликт имен, поэтому, вероятно, следует указать здесь.

4 голосов
/ 13 апреля 2009

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

В вашем случае я бы поднял что-то вроде

namespace AppName.ImageOperations
{
    public class Blur{...}
}
1 голос
/ 02 мая 2009

Руководство по именам (от Microsoft) - интересное прочтение ...

Для пространств имен они говорят:

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

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

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

Что касается Классов, они говорят одно:

Не давать префиксам имен классов (например, как буква в).

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

Стоит хотя бы просмотреть, чтобы подобрать идеи ...

1 голос
/ 13 апреля 2009

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

Ex.

namespace Company.Department.Product
{
     public class Class
     {}
}

Это позволяет очень легко разбивать код на части и помогать программистам решать, куда поместить функциональность. На настройку уходит больше времени, но я чувствую, что в итоге оно того стоит.

1 голос
/ 13 апреля 2009

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

Я бы предложил использовать префикс I для интерфейсов, но это всего лишь личное предпочтение.

1 голос
/ 13 апреля 2009

Если у вас есть общий базовый класс или интерфейс (например, класс Effect или интерфейс IEffect), то я бы, вероятно, использовал Effect в качестве суффикса для этих классов.

В противном случае я склонен использовать пространства имен.

...