类命名混乱[关闭]

Posted

技术标签:

【中文标题】类命名混乱[关闭]【英文标题】:Class naming chaos [closed] 【发布时间】:2010-11-19 11:05:51 【问题描述】:

我经常在决定如何命名课程时遇到困难。与其说是因为类的目的不明确,不如说是因为像 xxx***Controller***、xxx***Manager***、xxx***Info***、xxx***Helper*** 这样的名字, xxx***Util*** 等,我随处可见。

如果我有一个通过 HTTP 上传一些内容的类,我倾向于将其命名为 HttpUploader 或类似的名称。我见过很多例子,其中一个类似的类被命名为 HttpUploadManager、HttpTransmissionController、HttpUploadHelper 等等。

我对何时使用 Controller、Manager、Info 等感到有些困惑。有什么文章或书籍可以帮助我更好地命名类吗?

PS:另外,与 HttpTransmissionController 或 HttpDispatchManager 相比,像 HttpSender 这样的名称听起来很乏味:P

【问题讨论】:

我的直觉是尽可能远离 xxxManager、xxxController 等。我最近看到了这句话:“计算机科学中只有两件难的事情:缓存失效和命名事情。” - 菲尔·卡尔顿 @Dawie Strauss MVC 约定要求在任何控制器名称之后放置“控制器”。 @George Stocker 你有我 :-) 在问题中的所有示例(xxxController、xxxManager、xxxInfo、xxxHelper、xxxUtil)中,我认为 xxxController 是最不值得怀疑的。其他的往往会带来更多的困惑而不是价值。 【参考方案1】:

命名很难,所以不要担心你会挣扎,因为我们都这样做。相信我,它永远不会变得更容易!

就个人而言,对于整个 Controller/Manager/Helper/Util/Whatever 后缀的东西,我倾向于使用这样的规则:如果它是一个约定(例如,对于 ASP.NET MVC,它的约定是控制器类名称以“Controller”结尾)然后使用后缀,否则尽量避免它。我宁愿有一个名为 HttpUploader 的课程,而不是 HttpUploadManager

关于命名的最重要的事情是,类应该按照它所说的去做。如果它是一个使用 HTTP 上传内容的类,那么 HttpUploader 会准确地描述它。使用像HttpUploadManager 这样的花哨名称并不能告诉我它的作用。它会上传东西本身吗?它是否管理多个东西的上传?我喜欢让事情尽可能简单,同时描述类/方法/其他的目的。

我发现一个很好的指导方针是,如果你真的很难命名某件事,就像你花了很长时间思考但仍然无法将它的作用提炼成一个合理的名称,那么你可能需要重构你想要的任何东西'正在尝试命名为更小、更具体的组件。

【讨论】:

【参考方案2】:

如果您在选择名称时遇到困难,可以咨询ClassNamer.org。

【讨论】:

【参考方案3】:

关于 SO 的流行观点似乎是避免使用像 Manager、Info、Helper 或 Util 这样的后缀。

请参阅:Smelly Class Names 和 Class names that need refactoring。

【讨论】:

【参考方案4】:

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

通常的建议(为它的作用命名类)的问题是,一个类所做的许多事情在现实世界中没有很好的对应物,因此我们的传统词汇可能无法很好地匹配。例如,一个 HttpUploader 可以与另一个有助于上传的类配对,做一些协调,或者(我敢说吗?)管理上传。这种中间人协调在软件中很常见,但描述它的词都太模糊了,以至于让人嗤之以鼻。

【讨论】:

【参考方案5】:

Clean Code 这本书有一整章是关于变量名的。好东西。

【讨论】:

以上是关于类命名混乱[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

命名一个包含其他依赖类的类[关闭]

C++ 命名约定 [关闭]

将.SD与重命名的变量相结合,会使.SD列的名称混乱。

php的命名空间层级与目录层级是一致的吗?

在命名空间中组织 PHPUnit 测试 [关闭]

JavaScript 的命名准则 [关闭]