在类名中使用动词

Fat*_*ert 8 language-agnostic

我正在阅读Robert C. Martins的书"清洁代码".他写了一个不在类名中使用动词的约定.

我正在研究的项目我们需要验证和处理一些xml,所以我创建了这样的东西

public class XmlProcesser
{
public XmlProcesser(string filePathAndName)
{
}

public bool Validate()
{
}
}
Run Code Online (Sandbox Code Playgroud)

但是叔叔Bobs建议不要在班级名称中使用"处理器".

但是我该怎么称呼呢?Xml并不好,因为我在代码中经常使用.net类xml.我想过XmlHandler,但我想这比处理器更糟,因为"处理程序"对于程序员来说是另一回事.

你好吗?你在班级名字中使用动词吗?

Ros*_*son 32

命名很重要.Heck,TS Eliot和Andrew Lloyd Webber从The Naming of Cats那里获得了财富.但马丁斯的观点并不是关于不使用动词 - 而是关于面向对象的思考.类是用于实例化对象的模式.物体是物.他们的行为或名字是否更好地描述了类似的事物?

我是食肉动物吗?对.但我也写程序.我是程序员吗?对.但我也投票支持奥巴马.我是奥巴马的支持者吗?对.但是......最后,我是一个人.更准确地说,我是班级的一个实例[1] HomoSapiensSapiens.并且HomoSapiensSapiens有很多很多很多方法,所有这些方法都有类似动词的名字.喜欢HomoSapiensSapiens.EatBacon().喜欢HomoSapiensSapiens.WriteGoodCode().喜欢HomoSapiensSapiens.VoteDemocratic(). 等等

马丁的重点在于,如果你的课程最好像动词一样命名,你就会认为你的课程都错了.

[1] OO意义上的"阶级",不是王国/门/生物的意义.

  • 为奥巴马投票+1(和一个很好的答案). (4认同)
  • 这是一篇内容丰富且深思熟虑的文章,以易于理解的方式呈现.更多这个! (2认同)

Jen*_*der 10

  1. 正如评论中所提到的:处理器源自动词,而不是动词.因此,处理器是一个好的名字.

  2. XmlProcessor并没有真正告诉你关于这个类的更多信息.好吧,它正在处理xml,但它做了什么?验证它?转发它?解析它?因此,很可能会有一个更好的名称即将到来

  3. 认真对待SOLID原则,您最终会遇到像XmlProcessor这样的类{public void process(){...}}

要么

CalvinTransmogrifier{
    public Calvin transmogrify(Calvin c){ ...}
}
Run Code Online (Sandbox Code Playgroud)

那时你已经达到了OOP和Functional Programming之间的界限.人们可以提出一个论点

Transmogrify{
    public Calvin do(Calvin c){ ... }
}
Run Code Online (Sandbox Code Playgroud)

命名是一种可接受的方式.如果这实际情况取决于您选择的语言.例如在Scala中,如果你可以使用'apply'而不是'do',并且实际上像这样调用apply mothed

Transmogrify(new Calvin)
Run Code Online (Sandbox Code Playgroud)

至少我认为那时更好

Transmogrifier.do(new Calvin)
Run Code Online (Sandbox Code Playgroud)