C#类命名约定:是BaseClass还是ClassBase还是AbstractClass

C#类命名约定:是BaseClass还是ClassBase还是AbstractClass,c#,naming-conventions,base-class,C#,Naming Conventions,Base Class,命名基类的推荐方法是什么?它是以“Base”或“Abstract”作为类型名称的前缀,还是我们只是以“Base”作为后缀 考虑以下几点: 类型:ViewModel例如MainViewModel、ReportViewModel 基类:BaseViewModel或ViewModelBase或AbstractViewModel 还应考虑: 类型:产品如VirtualProduct、ExpiringProduct 基类:BaseProduct或ProductBase或AbstractProduct 你认

命名基类的推荐方法是什么?它是以“Base”或“Abstract”作为类型名称的前缀,还是我们只是以“Base”作为后缀

考虑以下几点:

类型:
ViewModel
例如MainViewModel、ReportViewModel

基类:
BaseViewModel
ViewModelBase
AbstractViewModel

还应考虑:

类型:
产品
如VirtualProduct、ExpiringProduct

基类:
BaseProduct
ProductBase
AbstractProduct

你认为哪个更标准

class Entity : EntityBase
{
}


以上都没有。考虑你的基类提供什么目的;就这么说吧。例如,汽车和自行车的基本类可以是车辆


如果您创建基类只是为了拥有一个类的基类,而没有其他目的或原因,那么您可能做错了什么。

我们使用BaseEntity,但我认为这是您自己的偏好。我经常看到另一个


只要在您的上下文中保持一致,无论是您的项目、名称空间还是您的团队(如果可能)。不同的约定比糟糕的约定更糟糕。

就我个人而言,我建议不要添加词库。你永远不知道什么时候你必须改变代码,它将不再是基本对象。尽管如此,我们在过去已经这样做了,我们在前面加上了单词Base的前缀。它似乎运行得更好。

框架中有一些带有基本后缀的示例,例如
System.Configuration.Provider.ProviderBase
System.Web.SessionState.SessionStateStoreProviderBase

但绝不是框架中的所有抽象基类都遵循此约定(例如,
System.Data.Common.DbParameter
System.Data.Common.DbCommand


就我个人而言,我会避免使用后缀,除非我想强调它是一个抽象类的事实,并认为该类的用户可能希望该名称表示一个具体的实现。

BaseEntity看起来很像camel case-strName,b seentity。我选择EntityBase,因为它首先定义了主题,这将帮助您更快地识别它的功能

如果你说的是虚拟基类,微软的标准是ClassnameBase(比如CollectionBase)。

给东西命名时一定要考虑字母顺序。我真的不喜欢看SQL server,每个存储过程都被命名为usp[something]。同样,不要过度使用Get和Set作为函数的前导名称。考虑将它们命名为ItemsGet或OrderPlace,而不是GetItems或PlaceOrder


因此,一般来说,ClassnameBase/EntityBase是一个更好的选择。

我认为这是一个选择的问题。我想说,如果您要创建很多基类,那么最好始终使用BaseClassname,因为这样您就可以通过键入base并从Intellisense获得其余的帮助,找到可以开始使用的基类。如果您有20个基类,并且您添加了Base作为后缀,但忘记了基类的名称,该怎么办?是否要首先从VS创建类图并找出可用的基类? 当它们只是一个或两个类时,可以将它们命名为ClassBase


GetItems和ItemsGet函数之间的决策也是如此。我想说的是,至少为了可读性——选择GetItems。遵循惯例:)

不同意;可读性。GetItems比ItemsGet更有意义。不同意。。。原因同上。。但无法投票否决……:(与其他评论相反,marcc没有提出类似itemgsGet()的建议。他写了items()。听起来你太依赖IDE来显示你正在寻找的内容,而不是了解你的代码。如果你的IDE没有进行模糊名称匹配来帮助你找到你正在寻找的内容,这听起来也像是IDE问题。这似乎更像是一种IDE黑客行为,而不是一种有用的编码实践。你的代码可能比你的IDE、新的IDE或版本功能可能会使这变得无用。情况并非总是如此,你会在框架中发现许多基类。CollectionBase、DictionaryBase…等等。这是一个好的观点,现实世界的对象应该完全适合于工件。公域的抽象应该像载体一样,必须遵循细节,但也要精确。值得注意的是.NET Framework中带有“Base”后缀的某些类是在1.0版之前命名的,Microsoft不再遵循这些约定……但它们现在不能更改名称。Microsoft的《框架设计指南》第6.2节(其中涉及基类)特别建议不要使用“Base”后缀。我在许多公司的许多OO语言中看到的最常用的做法是,“Base”指定的基类只能从中继承,不能直接使用。以您的示例来说,名为“Vehicle”的类听起来像是可以使用和“驱动”的类-它声称自己是一辆汽车。但是,如果基类被命名为“汽车零件”或“汽车必需品”或“汽车套件”-我们知道它不是直接可用的东西,而是各种车辆的基础。正如Warren在《Microsoft Framework Design Guidelines book》第6.2节“基类”中提到的:他们说避免使用基后缀:“如果类用于公共API,则避免使用“基”后缀命名基类。”你说的是匈牙利符号,而不是驼峰式。匈牙利符号恰好是驼峰式的,但它们是完全不同的东西。参见“基类”的可能副本是一个OO黑客,参见。它们通常很有用,有时是必要的,但它们仍然是一个黑客。如果你觉得需要查找所有可用的ba
class Entity : BaseEntity
{
}