我遇到了一些像this one这样的文章,这些文章表明某些词语永远不应该被用作类名的一部分。当一个类在名称中包含其中一个单词时,就意味着代码应该被重构或重新设计。
示例:
管理器
原因:由于几乎所有课程都“管理”某些内容并且“经理”的含义非常广泛,人们可以将很多职责交给“经理”课程,同时仍然能够宣称课程“只有一件事” ”。因此,使用“Manager”命名一个类并没有说明该类实际上做了什么。前面提到的文章"Naming Java Classes Without a 'Manager' "表明了这一点:
例如,使用名为“UrlManager”的类 - 您无法判断它是否汇集URL,操纵URL或审核它们的使用。所有的名字告诉你,这不是一个URL,但它确实与它们一起工作。另一方面,名称“UrlBuilder”可以更好地描述该课程的作用。
另一个例子:
辅助
原因:像“ThreadHelper”这样的类名让人们想知道为什么需要它以及为什么它不能只是“Thread”类的一部分。它实际上是适配器还是装饰器?如果是这样,那就这样命名。班级“线程”已经承担了太多的责任吗?如果是这样,重构并为新类赋予有意义的名称。 “帮助者”没有说明它正在做什么或它如何帮助。
类名中的其他词语是否表示需要重构或重新设计,应该避免?为什么呢?
编辑:我认为这些词语使用了很多,因为
这本书 Clean Code 列出了更多,但没有给出理由:
避免使用类名称中的管理器,处理器,数据或信息等字样。
如果有人能为他们提供可能的理由,那就太好了。
相关问题:
答案 0 :(得分:11)
Utils
。查看Chris Missal的blog entry了解原因。
答案 1 :(得分:8)
任何包含不是asbit的字符的名称。
我真的无法理解甚至编辑印地语字符。
class हिन्दी:হিন্দী ঠার
{
// argh..
}
答案 2 :(得分:4)
我最不喜欢的标识符通常是:
答案 3 :(得分:3)
文章(The
,A
,An
)
代词和名称(My
,Their
,John
)
数字,规格版本除外(2
,3
,5000
)
蓬松形容词(Fast
,Smart
,Good
,Better
)
大多数团队不理解的外语(Ελληνικά)
答案 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)
任何可能覆盖标准类的东西(例如:Comparator
,Iterable
& c。在Java中),除非您理解并特意打算引起这种行为。