Добавление -Ex к имени типа в .Net - PullRequest
10 голосов
/ 21 декабря 2011

Я недавно заметил образец в нашей кодовой базе на работе, где у большинства нашего модельного класса есть имя, такое как Пользователь, и есть наследующий тип, у которого есть дополнительные поля, называемые UserEx. Я также заметил это в C # асинхронной CTP, где они помещают дополнительные статические методы для Task в класс с именем TaskEx (из-за технических ограничений, поскольку они не могли изменить существующую библиотеку). Разговаривая с кем-то на работе, я узнал, что существуют классы -Ex для оптимизации передачи по сети (при необходимости вы можете получить только минимум). Мой вопрос, то, что означает -Ex означает? Единственное, о чем я могу думать, это, возможно, «Extra».

Ответы [ 6 ]

20 голосов
/ 21 декабря 2011

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

API Windows делает это повсеместно, как объяснено здесь .

Ганс намекает на проблему с этим подходом в своем объяснении: он не масштабируется .Что если вы хотите расширить «расширенную» функцию?Вы называете это FunctionExEx?Это выглядит глупо.

На самом деле настолько глупо, что собственные руководящие принципы Microsoft по кодированию для .NET (хотя они и субъективны) особенно рекомендуют против добавления Ex к типу .Вместо этого, если вы должны сделать это, вы должны использовать число:

MyType
MyType2   // modified version
MyType3   // oh wait, we had to modify it again!

Обвинять это в плохом планировании, поскольку dowhilefor пытается сделать это немного преждевременно.При написании реальных приложений и фреймворков вам часто нужно ship .Это означает, что вы получите быструю и грязную версию функции, которая работает .Позже вы решаете, что это плохой дизайн, и что-то нужно изменить.Вместо того, чтобы поднимать руки и полностью переписывать (вызывая огромные задержки и устаревание всего старого кода), вы вводите новый тип с другим именем.Задним числом всегда 20/20.

5 голосов
/ 21 декабря 2011

Завершение нового класса, метода или типа в Ex является соглашением об именах, и, как и любое соглашение об именах, оно подчиняется прихотям тех, кто его реализует.

Нет жестких и быстрых правил, и это не более или менее правильно, чем добавление 2 в конец класса (или Extra, или More, или DidntWantToMessWithThePublicApi).

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

2 голосов
/ 21 декабря 2011

Насколько я знаю, это означает «расширение» или «расширение».Это общий суффикс, когда вам нужно добавить функциональность к чему-то, что вы не можете изменить.Хорошим примером были различные функции -Ex в Win32 API, которые были добавлены, потому что C не поддерживает перегрузку функций.

1 голос
/ 21 декабря 2011

Эта практика НЕ ​​является отраслевым стандартом. Я признаю, что делаю это сам, но это в основном рудиментарная эмуляция некоторых старых функций ядра win32. например, у них изначально была функция C «beginthread», а позже была создана еще одна новая улучшенная версия «begintreadEx».

Я бы посоветовал вам начать использовать атрибут [Устаревший], чтобы дать сигнал другим кодировщикам (или вам самим) прекратить использовать старую функцию в пользу новой. Это имеет больше внутреннего значения.

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

0 голосов
/ 21 декабря 2011

Честно говоря, я думаю, что это означает, что "мы не планировали эту функцию достаточно долго, не думали об измененных требованиях, и мы должны иметь дело с этим сейчас, ближе к сроку". Конечно, это не всегда так, но каждый раз, когда я нахожу класс с Ex, я пытаюсь выяснить, почему он был введен и неправильно добавлен в фреймворк. Для меня это в основном как // HACK: Это имеет значение только для нашего кода, если он находится в фреймворке, я «надеюсь», это просто соглашение по именованию. Что это могло означать, уже было дано ответ, мое предположение всегда было «расширенным»

0 голосов
/ 21 декабря 2011

Я подумал, возможно:

  • внешний
  • выбрался
  • просто «ex» (как «вне» или «вне»)
...