2012-01-23 35 views
1

我最近一直以更具描述性的方式尝试命名抽象类和接口。主要是试图确保它们不偏离其预期目的。接口和抽象类的描述性命名约定

所以对于抽象类我一直用ISAISAN接口的ICANIPerform

例如,代替IOperationManager; ICanPerformOperationManagement

我发现这看起来更好看课堂。

我敢肯定,我不是第一个这样想,如果有人已经使用接口和抽象类任何一种描述性的命名约定不知道?它会扩展到大型项目,还是只是增加了混乱?

编辑:这个问题太主观了吗?

+0

我倾向于尝试将接口命名为对象* IS *的描述,并且在您的示例中将使用“IOperationManager”。 – asawyer

+0

也许更适合程序员。 – Nix

+0

“这个问题太主观了吗?“如果你不得不问......它可能是,我认为这也不适合程序员,虽然。 – BoltClock

回答

2

对于我来说,就是要采取短期和描述,消除了多余的名称术语。

个人不认为有必要包括Can或接口名称Perform,因为非常实用摆在首位接口的描述 - 的属性和方法,然后描述什么它应该能够做到。想一想这种方式 - 你会有ICantPerform...类型实现接口?当然不是;界面要么被执行,要么不在那里。

如果开发人员理解接口是什么,那么他们就明白这一点。如果他们不这样做;他们不应该使用接口,直到他们做。

这与抽象类型相同。 IsAIsAn又是多余的,因为只要类型从它继承,关系就完成了。正如安德鲁博士说的那样(+ 1) - Base后缀是有用的,因为它暗示着那里有抽象的行为要实现(这与BCL的其他部分很好地匹配)。

对我而言,IOperationManager是有意义的; ICanPerformOperationManagement笨重。

+0

+1就在你身后 –

2

Abtract类我倾向于追加基地给它,例如ViewModelBaseNodeBase

对于接口,I倾向于描述对象,所以IOperationManager而非ICanPerformOperationManagement。话虽如此,我偶尔会将界面从无聊的IDrawable更名为更有趣的ICanBeDrawn

请考虑开发者如何使用代码库。如果您正在学习intellisense,并且知道您有一个名为OperationManager的课程,则您会希望其接口为IOperationManager。很少人会在第一次尝试猜测,他们应该开始键入I..C..a..n..P..e..等等

+0

我也倾向于使用BaseViewModel/ViewModelBase,但问题是如果我需要添加另一个类是在那个之上?它会是ViewModelBaseBase还是ActualViewModelBase?所以我只是离开基地并将其称为ViewModel。如果我需要知道某种类型是否抽象,在任何IDE中都很容易 –

+0

@ ToniParviainen在命名课程时需要一小撮盐,也就是“一些明智”,这样做就足够了,你变成了一只手,然后你发现你的团队中有其他人不同意。醇。就个人而言,我会'ViewModelBase',但然后说派生(但仍然是抽象类型)为'SomeSpecificFunctionalityButStillAbstractViewModel'。所有vms必须从'ViewModelBase'继承,但不是全部来自'SomeSpecificFunctionalityButStillAbstractViewModel'。虽然没有正确的方法。总之,只要做些什么 –