2009-08-13 66 views
12

我经常在决定如何命名一个类时遇到困难。不是因为班级的目的不清楚,而是因为这样的名字,如xxx ***控制器***,xxx ***经理***,xxx ***信息***,xxx ***助手*** ,xxx *** Util ***等,我到处看到。类命名混沌

如果我有一个通过HTTP上传某些东西的类,我倾向于将它命名为HttpUploader或其他东西。我见过很多类似HttpUploadManager,HttpTransmissionController,HttpUploadHelper等类的实例。

我有点困惑到何时使用控制器,管理器,信息等。有什么文章或书籍可以帮助我成为更好的班级名字吗?

PS:另外,相比于HttpTransmissionController或HttpDispatchManager当像HttpSender名字听起来很贫血:P

+1

我的直觉是尽可能远离xxxManager,xxxController等。 我最近看到这句话:“计算机科学中只有两件难事:缓存失效和命名事情。” - Phil Karlton – 2009-08-13 21:45:30

+0

@Dawie Strauss MVC会议决定在任何控制器名称之后加上'Controller'。 – 2009-09-10 15:21:56

+0

@George Stocker你有我:-)在问题中的所有例子(xxxController,xxxManager,xxxInfo,xxxHelper,xxxUtil)我认为xxxController是最不可疑的。其他人往往会增加比价值更多的困惑。 – 2009-10-22 12:32:08

回答

12

命名是很难的,所以不要担心,你挣扎,因为大家都这样做。相信我,它永远不会变得更轻松!

个人与整个控制器/经理/助手/ Util /无论后缀的事情,我倾向于使用的规则,如果它是一个约定(例如,对于ASP.NET MVC约定控制器类名称结束于“控制器” )然后使用后缀,否则请尝试像地狱一样避免它。我宁愿有一个名为HttpUploader的课程,而不是HttpUploadManager

关于命名的最重要的事情是,班级应该按照自己的意思去做。如果它是一个使用HTTP上传内容的类,那么HttpUploader就可以完全描述它。使用像HttpUploadManager这样的花式名称并不能告诉我它做了什么。它是否自己上传东西?它是否管理多件事的上传?我喜欢尽可能简单地描述类/方法/目的。我发现一个很好的指导方针是,如果你真的很难命名一些东西,比如你花了很多年时间思考,你仍然无法提炼出一个合理的名字,那么你可能需要重构任何东西你正试图命名为更小,更具体的组件。

2

您也可以尝试查看更多描述性(多彩的?)后缀列表:ManagerManager

与通常的建议有关的问题是,许多类所做的事情都没有很好的现实世界等价,所以我们的传统词汇可能不太匹配。例如,一个HttpUploader可能与另一个可以帮助上传,做一些协调或者(敢说我这么说)的类来管理上传。这种中间人协调在软件中很常见,但用来形容它的词语都很含糊,以至于不容小觑。

2

该书Clean Code有关于变量名称的完整章节。好东西。

+0

谢谢。刚刚下令。 – akirekadu 2009-08-17 20:29:09