我正在阅读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意义上的"阶级",不是王国/门/生物的意义.
Jen*_*der 10
正如评论中所提到的:处理器源自动词,而不是动词.因此,处理器是一个好的名字.
XmlProcessor并没有真正告诉你关于这个类的更多信息.好吧,它正在处理xml,但它做了什么?验证它?转发它?解析它?因此,很可能会有一个更好的名称即将到来
认真对待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)