有哪些类名可能表示需要重构?

时间:2009-07-24 02:24:15

标签: refactoring naming

我遇到了一些像this one这样的文章,这些文章表明某些词语永远不应该被用作类名的一部分。当一个类在名称中包含其中一个单词时,就意味着代码应该被重构或重新设计。

示例:

管理器

原因:由于几乎所有课程都“管理”某些内容并且“经理”的含义非常广泛,人们可以将很多职责交给“经理”课程,同时仍然能够宣称课程“只有一件事” ”。因此,使用“Manager”命名一个类并没有说明该类实​​际上做了什么。前面提到的文章"Naming Java Classes Without a 'Manager' "表明了这一点:

  

例如,使用名为“UrlManager”的类 - 您无法判断它是否汇集URL,操纵URL或审核它们的使用。所有的名字告诉你,这不是一个URL,但它确实与它们一起工作。另一方面,名称“UrlBuilder”可以更好地描述该课程的作用。

另一个例子:

辅助

原因:像“ThreadHelper”这样的类名让人们想知道为什么需要它以及为什么它不能只是“Thread”类的一部分。它实际上是适配器还是装饰器?如果是这样,那就这样命名。班级“线程”已经承担了太多的责任吗?如果是这样,重构并为新类赋予有意义的名称。 “帮助者”没有说明它正在做什么或它如何帮助。

类名中的其他词语是否表示需要重构或重新设计,应该避免?为什么呢?

编辑:我认为这些词语使用了很多,因为

  • 它们通常具有广泛的含义
  • 它们几乎适合所有情境
  • 他们阻止设计师考虑更好的设计或名称
  • 人们认为可以使用它们

这本书 Clean Code 列出了更多,但没有给出理由:

  

避免使用类名称中的管理器,处理器,数据或信息等字样。

如果有人能为他们提供可能的理由,那就太好了。

  

相关问题:

     

What’s the best approach to naming classes?

11 个答案:

答案 0 :(得分:11)

Utils。查看Chris Missal的blog entry了解原因。

答案 1 :(得分:8)

任何包含不是asbit的字符的名称。

我真的无法理解甚至编辑印地语字符。

class हिन्दी:হিন্দী ঠার
{
  // argh.. 
}

答案 2 :(得分:4)

我最不喜欢的标识符通常是:

  1. 拼错的单词。 GEM在其所有API调用中都将调色板拼写为“pallete”。郁闷了。
  2. 我无法判断字符是1还是1,0还是O的标识符。
  3. 乔治卡林的七个脏话。

答案 3 :(得分:3)

文章(TheAAn

代词和名称(MyTheirJohn

数字,规格版本除外(235000

蓬松形容词(FastSmartGoodBetter

大多数团队不理解的外语(Ελληνικά)

答案 4 :(得分:2)

1)任何少于3个字符的东西都会让我感到紧张。它真的会伤害可读性,因为3个字符至少通常会给你至少一个元音。就个人而言,我尝试使用至少5个字符。

2)我有一个小小的名字是在课堂上结束的类名(例如:personClass或buttonClass),因为它会影响你制作一个对象而不是一个类的事实。同样地创建一个类的实例我发现没问题(例如:blueButton,redLabel),因为它更容易阅读,但是类的东西真的很烦人。

答案 5 :(得分:2)

我认为这个问题应该在为任何媒体选择正确名称的大局中看到。当我的妻子要求我从壁橱里取出东西时,我怎么知道她的衣柜是什么意思?

我的班级的对象可以创建按钮,为什么不把它称为ButtonFactory?也许该对象确实管理了临时文件的生命周期,所以我们称之为TemporaryFileManager。

当您没有足够的上下文信息时,就会出现问题。在创建可重用组件时尤其困难:我的TemporaryFileManager可能是通用Manager类的子类,而我的ButtonFactory可能是WidgetFactory的一个特例。

只要名称描述了在其上下文中所做的事情我就没事了。这就是上述文章的内容。

答案 6 :(得分:1)

列出糟糕的想法可能会退出一段时间,只是在我的脑海中,我可以想到很多不好的名字:读者,作家,工厂,物品,计时器,接收者,发件人等等。

基本上,避免使用名称,这些名称不会为您提供类或其在更大范围内的作用的上下文。它不必像IHelpToSendXMLDataToTheServer一样超过顶部,但可能XMLBroadcastUtil可能不会很糟糕。有些人甚至会为类名添加特定的prefex后缀,以指定它使用的模块。但是,我认为这是命名空间/包的作用的一部分。

答案 7 :(得分:1)

How To Write Unmaintainable Code上建议的所有内容。

答案 8 :(得分:1)

这总是一个糟糕的电话。

答案 9 :(得分:0)

摘要 模板 模型 厂 对象

这些都是非常通用的,其中一些可以从类定义中明显看出。其他人显然在一小部分文档中得到了更好的注意(很容易参考,这是喜欢resharper的一个原因)

答案 10 :(得分:0)

任何可能覆盖标准类的东西(例如:ComparatorIterable& c。在Java中),除非您理解并特意打算引起这种行为。