类命名混乱

Class naming chaos

我经常在决定如何命名一个类上挣扎。这并不是因为课程的目的不清楚,而是因为我到处都能看到诸如xxx**controller**、xxx**manager**、xxx**info**、xxx**helper**、xxx**util**等名称。

如果我有一个类通过HTTP上载一些内容,我倾向于将其命名为httpuploader或那些行上的内容。我见过许多类似的类被命名为httpuploadmanager、httpTransmissionController、httpuploadHelper等的实例。

我对什么时候使用控制器、管理器、信息等有点困惑。有没有什么文章或书籍可以帮助我成为一个更好的班级命名者?

另外,与httpTransmissionController或httpDispatchManager相比,httpSender这样的名称听起来很糟糕:p


命名很难,所以不要担心你会挣扎,因为我们都会。相信我,再容易不过了!

对于整个控制器/manager/helper/util/不管后缀是什么,我都倾向于使用这样一个规则:如果它是一个约定(例如,对于ASP.NET MVC,它是控制器类名称以"controller"结尾的约定),那么使用后缀,否则尽量避免使用它。我更愿意有一个叫做HttpUploader的类,而不是HttpUploadManager

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

我发现,一个很好的指导原则是,如果你真的很难说出某个东西的名字,比如你花了很多时间思考,但你仍然无法将它提取成一个合理的名字,那么你可能需要将你试图命名的东西重构成更小、更具体的组件。


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


因此,流行的观点似乎是避免使用像manager、info、helper或util这样的后缀。

请参见:需要重构的臭类名和类名。


这本书的干净代码有一整章关于变量名。好东西。


你可以试着看一个更具描述性的列表(彩色?)后缀也是:managerManager。

通常的建议的问题是,一个类所做的许多事情都没有很好的现实世界等价物,因此我们的传统词汇可能不匹配。例如,httpuploader可以与另一个帮助上传、进行一些协调的类配对,或者(我敢这样说吗?)管理上载。这种中间人协调在软件中很常见,但是描述它的词语都非常含糊,以致于它们会招致轻蔑。