Соглашение об именах классов C #: BaseClass, ClassBase или AbstractClass - PullRequest
101 голосов
/ 06 мая 2009

Каков рекомендуемый подход к именованию базовых классов? Это префикс имени типа с « Base » или « Abstract » или мы просто добавили бы его к «Base»?

Обратите внимание на следующее:

тип: ViewModel например MainViewModel , ReportViewModel

базовый класс: BaseViewModel или ViewModelBase или AbstractViewModel

Также рассмотрим:

тип: Product например Виртуальный продукт , Истекающий продукт

базовый класс: BaseProduct или ProductBase или AbstractProduct

Что вы считаете более стандартным?

class Entity : EntityBase
{
}

или

class Entity : BaseEntity
{
}

Ответы [ 8 ]

80 голосов
/ 06 мая 2009

В Framework есть примеры с базовым суффиксом, например, System.Configuration.Provider.ProviderBase, System.Web.SessionState.SessionStateStoreProviderBase.

Но ни в коем случае не все абстрактные базовые классы в Framework следуют этому соглашению (например, System.Data.Common.DbParameter, System.Data.Common.DbCommand).

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

41 голосов
/ 06 мая 2009

Ничего из вышеперечисленного. Подумайте, какую цель обеспечивает ваш базовый класс; назовите это так. Например, базовым классом автомобилей и велосипедов может быть автомобиль.

Если вы создаете базовые классы просто для того, чтобы иметь базовый класс одного класса, и без какой-либо цели или причины, кроме этого, вы, вероятно, делаете что-то неправильно.

4 голосов
/ 06 мая 2009

Если вы говорите о виртуальных базовых классах, стандартом Microsoft является ClassnameBase (например, CollectionBase.)

3 голосов
/ 09 июня 2009

Я думаю, что это вопрос выбора. Я бы сказал, что если вы создаете много базовых классов, то, возможно, лучше использовать BaseClassname всегда, потому что таким образом вы ВСЕГДА узнаете, какие базовые классы вы можете использовать, просто набрав Base и получив остальную часть справки от Intellisense. Что если у вас было 20 базовых классов, и вы добавили Base в качестве суффикса, и вы забыли, как назывался базовый класс? Вы хотите сначала создать диаграмму классов из VS и узнать, какие базовые классы доступны? Можно назвать их ClassBase, когда это всего один или два класса.

То же самое относится и к решению между GetItems и функцией ItemsGet. Я бы сказал, что читаемость ради хотя бы - пойти на GetItems. Следуйте соглашениям:)

2 голосов
/ 06 мая 2009

Лично я бы рекомендовал вообще не добавлять словосочетание. Вы никогда не знаете, когда придется менять код, и он больше не будет базовым объектом. При этом, мы делали это в прошлом, мы поставили перед словом «Base». Кажется, течет лучше.

2 голосов
/ 06 мая 2009

Мы используем BaseEntity, но я думаю, что это ваше собственное предпочтение. Я часто вижу другого.

Просто будьте последовательны в своем контексте, будь то ваш проект, пространство имен или, если возможно, ваша команда. Различные соглашения хуже плохого соглашения ИМХО.

0 голосов
/ 06 мая 2009

Всегда думайте об алфавите, когда называете материал. Мне действительно не нравится смотреть на сервер SQL, и каждая хранимая процедура называется usp [что-то]. Кроме того, не злоупотребляйте Get и Set в качестве ведущих имен для функции. Вместо GetItems или PlaceOrder подумайте о присвоении им имен ItemsGet или OrderPlace.

Таким образом, в общем случае ClassnameBase / EntityBase будет лучшим выбором.

0 голосов
/ 06 мая 2009

BaseEntity очень похож на случай верблюда - strName, bseEntity. Я бы пошел на EntityBase, так как он сначала определяет предмет, который поможет вам быстрее определить его функцию.

...