命名基类的推荐方法是什么?它是否在类型名称前加上" Base "或" Abstract ",或者我们只是用"Base"作为后缀?
考虑以下:
type:ViewModel例如MainViewModel,ReportViewModel
基类:BaseViewModel或ViewModelBase或AbstractViewModel
还要考虑:
type:Product例如VirtualProduct,ExpiringProduct
基类:BaseProduct或ProductBase或AbstractProduct
您认为哪个更标准?
class Entity : EntityBase
{
}
Run Code Online (Sandbox Code Playgroud)
要么
class Entity : BaseEntity
{
}
Run Code Online (Sandbox Code Playgroud) 我清楚地记得,有一次,微软推动的指导原则是将"Base"后缀添加到抽象类中,以避免它是抽象的事实.因此,我们有类,如System.Web.Hosting.VirtualFileBase,System.Configuration.ConfigurationValidatorBase,System.Windows.Forms.ButtonBase,,当然,System.Collections.CollectionBase.
但是我注意到,最近,框架中的许多抽象类似乎都没有遵循这个约定.例如,以下类都是抽象的,但不遵循此约定:
System.DirectoryServices.ActiveDirectory.DirectoryServer
System.Configuration.ConfigurationElement
System.Drawing.Brush
System.Windows.Forms.CommonDialog
这就是我几秒钟内就可以鼓起来的东西.所以我去查看官方文档说的内容,以确保我没有疯狂.我在开发类库的设计指南中找到了MSDN上的类,结构和接口的名称.奇怪的是,我没有提到在抽象类名称的末尾添加"Base"的指南.该框架的1.1版已不再适用该指南.
那么,我输了吗?该指南是否存在?是不是一言不发就被遗弃了?在过去的两年里,我一直在为自己创造长篇名字吗?
有人在这里给我一个骨头.
更新 我不是疯了.该指南已存在.Krzysztof Cwalina在2005年抱怨它.
在作为继承树底部的类名中使用"Base"这个词是否可以接受?
我总是发现这有点像一个警察,只是想知道是否有人同意我.
例如,如果我将MyClassA和MyClassB中的某些元素重构为公共基类,我很想创建一个MyBaseClass,两者继承.
但是如果我需要重构MyBaseClass会发生什么?MyBaseBaseClass?现在那真是太傻了.
我知道Rocky Lhotka不介意他的CSLA框架,但我总是对编程中的'definites'感到不安.
思考?
让我澄清为什么我甚至担心这一点.
我有两个名称空间 - MySpecificNamespace和MyCommonNamespace.正如您所料,MyNamespace使用MyCommonNamespace.
现在,我希望尽可能最大限度地使用命名空间来描述问题的上下文,并避免将上下文添加到类名中.因此,例如,考虑我在MyNamespace中有一个类,它来自MyCommonNamespace中的一个类.
选项A.
我可以称之为
MySpecificClass: MyClass
{
}
Run Code Online (Sandbox Code Playgroud)
但后来我在名称中添加了"特定"(上下文) - 这是多余的,因为它已经在MySpecificNamespace中.
选项B.
MyClass: MyCommonNamespace.MyClass
{
}
Run Code Online (Sandbox Code Playgroud)
你可以看到我们在这里如何混淆,对吧?
选项C.
我觉得这个很可疑:
MyClass: MyBaseClass
{
}
Run Code Online (Sandbox Code Playgroud)