Соглашение об именах классов C #: базовый класс, базовый класс или абстрактный класс
-
05-07-2019 - |
Вопрос
Каков рекомендуемый подход к именованию базовых классов? Это префикс имени типа с " Base " или " Аннотация " или мы просто добавим суффикс "Base"?
Примите во внимание следующее:
type: ViewModel
, например. MainViewModel , ReportViewModel
базовый класс: BaseViewModel
или ViewModelBase
или AbstractViewModel
Также рассмотрим:
type: Product
, например. VirtualProduct , ExpiringProduct
базовый класс: BaseProduct
или ProductBase
или AbstractProduct
Как вы думаете, что является более стандартным?
class Entity : EntityBase
{
}
или
class Entity : BaseEntity
{
}
Решение
В Framework есть примеры с базовым суффиксом, например, System.Configuration.Provider.ProviderBase
, System.Web.SessionState.SessionStateStoreProviderBase
.
Но ни в коем случае не все абстрактные базовые классы в Framework придерживаются этого соглашения (например, System.Data.Common.DbParameter
, System.Data.Common.DbCommand
). р>
Лично я бы избегал использования суффикса , если я не хотел подчеркивать тот факт, что это абстрактный класс, и считал, что в противном случае пользователи этого класса могут ожидать, что имя будет указывать конкретную реализацию.
Другие советы
Ничего из вышеперечисленного. Подумайте, какую цель обеспечивает ваш базовый класс назовите это так. Например, базовым классом автомобилей и велосипедов может быть автомобиль.
Если вы создаете базовые классы просто для того, чтобы иметь базовый класс одного класса, и без какой-либо цели или причины, кроме этого, вы, вероятно, делаете что-то не так.
Если вы говорите о виртуальных базовых классах, то стандартом Microsoft является ClassnameBase (например, CollectionBase.)
Я думаю, что это вопрос выбора. Я бы сказал, что если вы создаете много базовых классов, то, возможно, лучше использовать BaseClassname всегда, потому что таким образом вы ВСЕГДА узнаете, какие базовые классы вы можете использовать, просто набрав Base и получив остальную часть справки от Intellisense. Что если у вас было 20 базовых классов, и вы добавили Base в качестве суффикса, и вы забыли, как назывался базовый класс? Вы хотите сначала создать диаграмму классов из VS и узнать, какие базовые классы доступны? Можно назвать их ClassBase, когда это всего один или два класса. Р>
То же самое относится и к решению между GetItems и функцией ItemsGet. Я бы сказал, что читаемость ради хотя бы - пойти на GetItems. Следуйте соглашениям:)
Мы используем BaseEntity, но я думаю, что это ваше собственное предпочтение. Я часто вижу другого.
Просто будьте последовательны в своем контексте, будь то ваш проект, пространство имен или, если возможно, ваша команда. Различные соглашения хуже, чем плохие соглашения ИМХО.
Лично я бы рекомендовал вообще не добавлять слова. Вы никогда не знаете, когда придется менять код, и он больше не будет базовым объектом. При этом, мы делали это в прошлом, мы поставили перед словом «Base». Кажется, течет лучше.
BaseEntity очень похож на случай верблюда - strName, bseEntity. Я бы пошел на EntityBase, так как он сначала определяет предмет, который поможет вам быстрее определить его функцию. Р>
Всегда думайте об алфавите, когда называете материал. Мне действительно не нравится смотреть на сервер SQL, и каждая хранимая процедура называется usp [что-то]. Кроме того, не злоупотребляйте Get и Set в качестве ведущих имен для функции. Вместо GetItems или PlaceOrder подумайте о присвоении им имен ItemsGet или OrderPlace.
Итак, в общем, ClassnameBase / EntityBase был бы лучшим выбором.