What is the recommended approach to naming base classes? Is it prefixing the type name with "Base" or "Abstract" or would we just suffix it with "Base"?
Consider the following:
type: ViewModel
e.g. MainViewModel, ReportViewModel
base class: BaseViewModel
or ViewModelBase
or AbstractViewModel
Also consider:
type: Product
e.g. VirtualProduct, ExpiringProduct
base class: BaseProduct
or ProductBase
or AbstractProduct
Which do you think is more standard?
class Entity : EntityBase
{
}
or
class Entity : BaseEntity
{
}
There are examples in the Framework with the Base suffix, e.g. System.Configuration.Provider.ProviderBase
, System.Web.SessionState.SessionStateStoreProviderBase
.
But by no means all abstract base classes in the Framework follow this convention (e.g. System.Data.Common.DbParameter
, System.Data.Common.DbCommand
).
Personally I would avoid using the suffix unless I wanted to emphasize the fact that it's an abstract class and felt that otherwise users of the class might expect the name to indicate a concrete implementation.