什么是归属或属性接口的良好(自然语言)命名方案

时间:2009-06-23 12:31:31

标签: c# java naming-conventions

注意:这是关于的热门界面命名问题 在开头使用或不使用“I”

我经常遇到问题 界面,表示类的归属或属性 (请参阅以下列表)

让我们集思广益,有什么样的界面?

  • 表示班级的“kind” DataStructure,Number,Thing

  • 表示班级的“专​​业” 比较者,执行者,听众

  • 表示使用班级执行可能的操作 可比较,可执行,可关闭

以上所有人都清楚,但让我们来解决我的问题:

  • 表示班级的所有物或财产 HasListener,LinksToRoot,BelongsToParent,KnowsSibling,ContainsChildren, 命名为WithDescription,......?

所以,最后一点是我的问题。我的英语不完美, 但即使我对这些名字感到奇怪。 对我来说,他们听起来不那么成功,而不是那么有意义。 但我经常最终选择这种名字。

在预期接口的C#中甚至更加不舒服 从'我'开始
IHasListener,IKnowsSibling,......
对我来说听起来像LOLSPEAK “我可能会对kitteh感到厌烦 可爱,天啊!@#!“

那么,我应该如何命名一个指示所属或的界面 一类的财产?

6 个答案:

答案 0 :(得分:9)

问题在于您选择描述“属性”的方式。

您提供的大多数示例都可以映射到您提到的其他类别。

仅举几例,例如:

HasListener =>实现可听

ContainsChildren =>实现

WithDescription =>实现可描述

尝试坚持使用更传统的命名方案,最好是以最佳,更易读的方式描述您的对象。

此外,请确保您没有使用无用的接口过度接口您的类。使它非常简洁,非常简洁,否则你开发人员阅读你的代码会很快丢失。

答案 1 :(得分:4)

在您提出的一些问题案例中,我认为通过“从另一方面”看可能会有答案:

HasListener -> Speaker
LinksToRoot, HasParent -> Child (or perhaps Node)
ContainsChildren -> Parent

当然,不同的案例或多或少都会很明显。

答案 2 :(得分:0)

我认为你可以把你正在做的一些事情变成“专业”类型的界面:

  • HasListener - > ListenerContainer
  • WithDescription - > DescriptionContainerDescribable也可能有效,具体取决于此说明中“描述”的具体内容)

许多其他界面似乎与树结构有关。我建议根据它们在树中的功能命名它们。

  • ContainsChildren - > ParentCollection
  • BelongsToParent - > Child

至于其他的,我需要更多地了解这些接口的用途。其中一些,如Named,可能被命名为正常。

答案 3 :(得分:0)

这些声音对我来说听起来很糟糕,我同意。 “HasListener”听起来更像是一个方法调用,应该返回一个布尔值而不是一个接口名称。

不应存在接口来保存/存储类的属性。它们应该用于概述实现它的所有类应该遵循的关系。我个人坚持“是一种”关系。如果存在直接关系,即猫“是(n)”动物,那么我将为它创建一个界面并将其命名为Animal给它一个合理的名称。

我真的很想知道“HasListener”接口概述了什么。它到底是做什么用的?为什么不能将它命名为MyProjectListeners(用项目名称替换MyProject)来描述为该项目定义的监听器必须遵守的内容?

答案 4 :(得分:0)

HasListener 没问题,还有可听。我没有任何反对的东西。

但是 IHasListener 很糟糕:首先是因为我们不需要I前缀来告诉它是一个接口(看看类签名!),第二个因为它听起来像“我不知道”不会说英语。

我使用I前缀创建的Java中唯一的接口是 IRule 。 :)

答案 5 :(得分:0)

我实际上非常喜欢“IHasListener”方法。

在.NET Framework中,您可以在以下接口中找到它:

  • IRaiseListChangedEvents
  • IHasXmlNode

“可监听”这样的名称表明该实现会进行监听,而不是它包含一个监听器。 IHasListener清楚地说明了它的作用。