鲍伯叔叔的“名词短语名称”是什么意思?


14

我正在阅读Bob叔叔的Clean Code。由于我不是讲英语的人,因此我无法理解以下陈述:

类和对象应该有像名词或名词短语的名称 CustomerWikiPageAccount,和AddressParser。避免的话想 ManagerProcessorData,或Info在类的名称。类名不能是动词。

据我所知,没有一个ManagerProcessorDataInfo是一个动词,是不是?他想强调的重点是什么?


鲍勃叔叔也许在采用RESTful思想来颂扬资源即对象的优点。
rwong

Answers:


21

这三点是分开的:

  • 类名应为名词或名词短语。这意味着类的名称应为动词的主语。在面向对象设计的情况下,方法将是在类表示的事物上发生的动词。

  • 应避免使用某些单词。Manager表示可能的神级InfoData可能指示虚拟数据容器。诸如此类的词可能表示问题空间的建模不佳。

  • 动词绝不能是类名。参见第一点-类对事物进行建模,方法对行为进行建模。


1
诸如此类的词可能表示问题空间的建模不佳。-好吧,人们会认为,问题空间的建模是否很好,与选择的名称无关。一个好名字不会帮助一个糟糕的设计。好的设计只会因名声低落而受到损害。
Ingo,

考虑到您实际如何构建类以及如何与外界交互时,可以将其降低一点-类的属性通常是名词,而类的方法通常是动词
PeteH

如果您的项目有一个可以考虑调用“管理器”,“信息”或“数据”的类,那么它可能会有十几个这样的类,这意味着您将不会使用这些名称。您将拥有ThisManager和ThatManager以及AnotherManger等。
gnasher729

他说动词绝不能使用类名,但我只是在重读“添加有意义的上下文”,在第29页的示例中,他将类命名为GuessStatisticMessage。现在,我对该规则感到困惑,因为我将他对Guess的用法解释为动词,而不是名词。dictionary.com/browse/guess?s=t
Devin Gleason Lambert'5

2
@DevinGleasonLambert但这不是猜测。这是一个Guess统计信息。消息是名词。Guess Statistic只是描述了消息的类型-有关猜测统计信息的消息。
托马斯·欧文斯

7

他试图在事物(名词)和动作(动词)之间进行区分。在传统的面向对象设计中,我们将类视为事物,将类的方法视为事物可以执行的动作。要管理是照顾或协调,而管理者是管理的人或事物。

入门书籍通常将其归结为最简单和最明显的术语,例如使用BarkBite方法的名为Dog的类。在现实世界的课堂中,区别通常会更加微妙,但仍然存在。我相信Bob叔叔提出的观点是,尽管经理是一个名词,但它引起了人们对经理所做的一切的关注,而不是经理的所作所为-它太模糊了用词来形容确切的含义被管理或如何管理。


5
不幸的是,这种想法可能导致错误的设计。主要示例之一是银行帐户的经典入门示例。在几乎所有的OO教科书中,Account是一个对象,balance一个字段和transfer方法。但是正确的设计应该是:Transfer是一个对象,account一个字段和balance一个方法。这就是银行系统的实际实施方式以及银行在计算机之前的实际工作方式。
约尔格W¯¯米塔格

@JörgWMittag:值得一提的警示故事是一个答案;这些是一般准则,在某些罕见情况下可能导致不良的分解。
smci
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.