将动词与函数一起使用,将名词与类一起使用-接口如何?[关闭]


23

好的,我了解将动词与函数一起使用以及将名词与类一起使用的常规约定。界面呢?在提出接口名称时,有什么方法可能不太明显?

只是为了清楚起见,我并不是在说是否在名称前加上“ I”,还是要使用camelCase还是PascalCase。我想知道为接口找出清晰的语义名称的方法。

编辑 我正在沉迷于如何以最清晰的方式命名接口。我想它也只需要是一个名词,因为当我想到命名类时,我想到了它可以关联的最接近的“真实”世界对象。我想现实世界的接口是诸如键盘,鼠标,遥控器,ATM屏幕之类的东西。这些都是名词。无论如何,将对任何一种很好的方式来表达接口名称的见解表示赞赏。


2
嗯。基于标题,我认为这将是使编程和英语之间的语音部分相等。在这种情况下,似乎可以使用madlib
Izkata 2012年

记住,当创建一个类时,还要为该类实例化的对象创建一个接口。或者换句话说,类是已实现的接口。因此,它们应使用相同的命名约定。
Daniel T.

同样,恕我直言“将动词与功能配合使用”也太笼统了。您应该在命令中使用动词,在查询中使用名词。
Daniel T.

Answers:


21

我会说这取决于接口定义的内容。在某些情况下,当界面相当具体和详细时,我认为最好使用名词。的例子是IListICollection

有时,尽管接口更多是关于向类添加某些常规功能。在那种情况下,我认为形容词是最好的。例子是IDisposableIEnumerable...

也许另一种思考方式是您的界面定义了多少“能力”。

例如,该IList<T>接口定义了以下功能:添加,清除,包含,插入,删除,...这些都是列表的属性,因此IList是一个好名字。

IDisposable另一方面只定义一种能力:处置。因此,它适用于任何一次性的物品。因此得名IDisposable


10
我建议使用“ _able”形容词,如果您的接口是以可以对对象进行的操作(例如IEnumerable)命名的,则建议使用“ _er”名词,如果您的接口是以对象对其他对象所做的事情命名的( (例如IEqualityComparer)和通用名词(如果您的界面是以模仿其行为的某种事物(例如IList<T>)命名的。
2012年

@supercat的评论实际上应该包含在此答案中。这很有意义。
Nikhil Vartak

实际在接口名称前添加前缀I是多余的。
user1870400

5

一个接口描述的行为所以名称应该这么说。我不确定这方面的规则,但听到它的名字便会知道。

一些例子:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

我认为用I和命名接口是不合适的SetISet因为作为开发人员,您不必担心它是接口还是类。我看到这种做法现在在Java中不存在。


+1表示“作为开发人员,您不必担心接口或类。”
卡扎尔克2013年

“作为开发人员,您不必担心它是接口还是类”-意见不同,因为如果是接口,则需要知道应该实现哪些成员。
Maximus Minimus 2013年

@MaximusMinimus加上前缀I是多余的。那为什么不给抽象类加上前缀A,将常规类加上C等等呢?
user1870400

@ user1870400-是的,但这不是我不同意的部分。
Maximus Minimus

4

由于接口实际上只是类型的“什么”的表达,而不是类型的“如何”的表达,因此至少从语言的角度来看,我将以与命名类相同的方式来命名它们。我唯一要补充的是,它们通常比特定的实现者更通用(例如,“客户”界面可能具有“ ProspectiveCustomer”和“ PayingCustomer”实现者)。


0

接口就像类一样使用。因此,在用名词命名类时,也应该用名词命名。当类别为“汽车”和“卡车”时,更喜欢抽象名词,例如“车辆”。


0

快速解答:接口更多的是加入的SET的能力,特点,共同边界或互连实体类,模型,概念等之间的..

关于将常见行为添加到类和实体,然后会出现一个有意义的好名字,以标识一组实际功能。

接口命名之类的:IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.大概可以解释一下这个概念。


1
是的,接口代表合同或功能;众所周知。但这如何回答如何命名的问题?在这方面,您真正要说的是:“想一想,灵感就会打击您。” 这没有给出任何建议,例如,应选择以下哪个名称,以及为什么使用:(IStateMachineBuilder名词),IBuildStateMachine(以动作ICanBuildStateMachine命名),(以能力命名)等
stakx

0

这取决于如果接口仅包含方法,则最好使用“ Actions”之类的动词来命名它,就像它代表一个通用类wchich包含static,final字段一样,那么我们可以像“ Vehicle”一样使用通用名词

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.