15

我经常处于这样一种情况,即我有一个由接口或类表示的概念,然后我有一系列扩展它的子类/子接口。

例如: 一个通用的“DoiGraphNode” 一个代表资源的“DoiGraphNode” 一个代表 Java 资源的“DoiGraphNode” 一个带有关联路径的“DoiGraphNode”,等等等等。

我可以想到三种命名约定,并希望对如何选择提出意见。


选项 1:始终以概念名称开头。

因此:DoiGraphNode、DoiGraphNodeResource、DoiGraphNodeJavaResource、DoiGraphNodeWithPath 等。

Pro:很清楚我在处理什么,很容易看到我拥有的所有选项

骗子:不是很自然?一切看起来都一样?


选项2:把特殊的东西放在开头。

因此:DoiGraphNode、ResourceDoiGraphNode、JavaResourceDoiGraphNode、PathBaseDoiGraphNode 等等等等。

亲:看到代码就很清楚了

缺点:找到它可能很困难,特别是如果我不记得名字,缺乏视觉一致性


选项 3:放置特殊内容并删除一些多余的文本

因此:DoiGraphNode、ResourceNode、JavaResourceNode、GraphNodeWithPath

优点:写和读的不多 缺点:看起来像 cr*p,非常不一致,可能与其他名称冲突

4

5 回答 5

7

为它们命名。

如果命名它们很难或模棱两可,这通常表明该类做得太多(单一职责原则)。

为避免命名冲突,请妥善选择您的命名空间。

就个人而言,我会使用3

于 2009-02-22T03:45:40.310 回答
5

使用任何你喜欢的东西,这是一个主观的事情。重要的是要明确每个类代表什么,并且名称应该使继承关系有意义。不过,我真的认为在名称中编码关系并不是那么重要。这就是文档的用途(如果你的名字适合对象,人们应该能够很好地猜测什么继承自什么)。

对于它的价值,我通常使用选项 3,根据我查看其他人代码的经验,选项 2 可能比选项 1 更普遍。

于 2009-02-22T03:42:45.463 回答
2

您可以在编码标准文档中找到一些指导,例如这里有 C# 的 IDesign文档

就个人而言,我更喜欢选项 2。这通常是 .NET Framework 命名其对象的方式。例如查看属性类。它们都以属性(TestMethodAttribute)结尾。EventHandlers 也是如此: OnClickEventHandler 是处理 Click 事件的事件处理程序的推荐名称。

我通常在设计自己的代码和接口时尝试遵循这一点。因此,IUnitWriter 会生成 StringUnitWriter 和 DataTableUnitWriter。这样我总是知道他们的基类是什么,而且读起来更自然。自我记录代码是所有敏捷开发人员的最终目标,所以它似乎对我很有效!

于 2009-02-24T02:33:10.450 回答
2

我通常命名类似于选项 1,尤其是当类将被多态使用时。我的理由是最重要的信息位列在最前面。(即子类基本上是祖先的事实,(通常)扩展“添加”)。我也喜欢这个选项,因为在对类名列表进行排序时,相关的类将被一起列出。即我通常将翻译单元(文件名)命名为与类名相同,因此相关的类文件自然会一起列出。同样,这对于增量搜索很有用。

尽管我在编程生涯的早期倾向于使用选项 2,但我现在避免使用它,因为正如您所说,它“不一致”并且看起来不是很正交。

当子类提供大量扩展或规范时,或者如果名称很长,我经常使用选项 3。例如,我的文件系统名称类是从 String 派生的,但它们极大地扩展了 String 类并且具有显着不同的用途/含义:

从 String 派生的 Directory_entry_name 增加了广泛的功能。从 Directory_entry_name 派生的 File_name 具有相当专业的功能。从 Directory_entry_name 派生的 Directory_name 也具有相当专业的功能。

此外,与选项 1 一起,我通常对接口类使用非限定名称。例如,我可能有一个类交互链:

  • 文本(一个界面)
  • text_abstract(抽象(基)泛化类)
  • Text_ASCII(特定于 ASCII 编码的具体类)
  • Text_unicode(特定于 unicode 编码的具体类)

我更喜欢接口和抽象基类自动出现在排序列表的首位。

于 2009-03-01T10:48:15.947 回答
0

选项三更符合逻辑继承的概念。由于您正在专门研究接口或类,因此名称应表明它不再使用基本实现(如果存在)。

有许多工具可以查看类继承自什么,因此一个简洁的名称表明类的真正功能将比试图将过多的类型信息打包到名称中走得更远。

于 2009-02-22T04:08:07.447 回答