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

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

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

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

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

также считают:

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

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

как вы думаете, что является более стандартным?

class Entity : EntityBase
{
}

или

class Entity : BaseEntity
{
}

8 ответов


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

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

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


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

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


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


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

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


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


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

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


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


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

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