很久以前,我读过一篇文章(我相信是一篇博客文章),它让我在命名对象方面走上了“正确”的轨道:在程序中命名事物时要非常非常谨慎。
例如,如果我的应用程序(作为一个典型的商业应用程序)处理用户,公司和地址,我将有一个User
,一个Company
和一个Address
域类-可能在某个地方会弹出UserManager
,CompanyManager
和AddressManager
来处理这些事情。
那么你能说出那些UserManager
、CompanyManager
和AddressManager
是做什么的吗?不,因为Manager是一个非常通用的术语,适用于你可以用域对象做的任何事情。
我读到的文章建议使用非常具体的名称。如果它是一个C++应用程序,UserManager
的工作是分配和释放用户从堆中,它不会管理用户,而是保护他们的出生和死亡。嗯,也许我们可以称之为UserShepherd
。
或者UserManager
的工作是检查每个User对象的数据并对数据进行加密签名。然后我们会有一个UserRecordsClerk
。
现在这个想法一直困扰着我,我试着应用它。发现这个简单的想法非常困难。
我可以描述类做了什么,(只要我不陷入快速和肮脏的编码)我编写的类完全做了一个的事情。从描述到名称,我错过的是一种名称目录,一个将概念映射到名称的词汇。
最终,我希望在我的脑海中有一个类似于模式目录的东西(通常设计模式很容易提供对象名称,例如工厂)
保姆-帮助对象在创建后达到“可用”状态-例如通过连接到其他对象
等等等等。
那么,你是如何处理这个问题的呢?你是否有固定的词汇,你是否会在工作中发明新的名字,或者你是否认为命名不那么重要或错误?
附言:我也对讨论这个问题的文章和博客的链接感兴趣。首先,这是让我思考的原始文章:命名没有“管理器”的Java类
以下是我从这个问题中学到的一点总结。
关于此主题的更多文章/书籍:
以及我从答案中收集的名称前缀/后缀的当前列表(主观地!):
在路上有一个很好的提示:
不要给瘫痪命名。是的,名字非常重要,但它们还不够重要,不足以浪费大量时间。如果你不能在10分钟内想出一个好名字,那就继续。