Соглашение об именах классов С#: это BaseClass или ClassBase или AbstractClass

Каков рекомендуемый подход к присвоению имен базовым классам? Является ли он префиксом имени типа " Base" или " Абстрактный", или мы просто добавим его в "Base"?

Рассмотрим следующее:

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

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

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

тип: Product например. VirtualProduct, ExpiringProduct

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

Какой, по вашему мнению, более стандартный?

class Entity : EntityBase
{
}

или

class Entity : BaseEntity
{
}

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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