2009-04-13 3 views
3

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

В моем случае, у меня есть классы, такие как:

Blur 
Contrast 
Sharpen 
Invert 
... 

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

Любые идеи?

ответ

24

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

11

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

+0

+1 я как префиксы интерфейсы с I, и я часто использую венгерскую нотацию для локальных переменных, но все на уровне экземпляра или выше получает «правильное» имя. –

+2

ihmo отличная статья о том, как изобретатели имели в виду венгерскую нотацию, которую использовал Джоэл Спольский: http://www.joelonsoftware.com/articles/Wrong.html –

+0

I префикс - еще одна болезненная идея созыва, которую я неохотно принимаю. К сожалению, должен быть ясный способ сообщить, что что-то является интерфейсом. Работа на Java в течение многих лет убедила меня в том, что префикс «I» болезнен, но все же лучше, чем ничего. –

4

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

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

namespace AppName.ImageOperations 
{ 
    public class Blur{...} 
} 
1

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

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

1

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

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

6

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

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

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

EDIT

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

+0

Спасибо, Майкл, за # 3, допустимо ли это только для абстрактных классов? Как насчет других базовых классов? –

+0

Я отредактировал pontificate еще немного. Соглашения об именах действительно субъективны, и вы должны делать то, что вам удобно. В любом случае работает, но я использую его только для абстрактных классов по причинам, изложенным в последнем абзаце. –

+0

@Michael: До сих пор общепринятой практикой является суффикс делегата с помощью «Handler»? Если это так, вы можете добавить это в список. –

1

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

Ex.

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

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

1

Guidelines for Names (от Microsoft) это интересно читать ...

Для Namespaces они говорят:

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

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

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

Для классов, одна вещь, которую они говорят:

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

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

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

Смежные вопросы