建筑商和机械手

这是在OOP中命名方法的简单原理,我尝试在我的代码中遵循: 操作时动词构建时名词 。 而已。 两者之间什么都没有。 诸如saveFile()getTitle()不适合使用,必须重命名和重构。 此外,“操作”的方法必须始终返回void ,例如print()save() 。 让我解释。

首先,我必须说这个想法与Bertrand Meyer在他的《面向对象的软件构造》一书中提出的想法非常相似,他在书中建议我们将一个对象的方法分为两个截然不同的类别:查询和命令。

该原理背后的思想是很哲学的。 让我们从构建器开始,这些构建器应该创建或找到一个对象然后返回它。 假设我有一个书店,请我给我一本书的名字:

interface Bookshelf {Book find(String title);
}

显然,它是一个“构建者”(或用迈耶的术语来说是一个“查询”)。 我要一本书,这本书已经送给我了。 但是,问题出在方法的名称上。 它被称为“查找”,这意味着我知道如何处理这本书。 将会发现。

但是,这不是我们应该如何对待对象的方式。 我们决不能告诉他们如何做我们希望他们做的工作。 取而代之的是,我们必须让他们决定是要找到,构造这本书,还是从内存缓存中取出这本书。 当我们查询时,我们必须说出我们要寻找什么结果,然后让对象来决定要如何构造该结果。 此方法更合适的名称是book()

interface Bookshelf {Book book(String title);
}

经验法则是:建造者始终是名词。 如果该方法返回某些内容,则必须为名词。 最好其名称应说明该方法返回的内容。 如果是一本书,则将其命名为book() 。 如果是文件,请调用方法file()等。以下是一些好的构建器示例:

interface Foo {float speed(Actor actor);Money salary(User user);File database();Date deadline(Project project, User user);
}

相反,以下是一些名称不正确的生成器的示例:

interface Foo {float calculateSpeed(Actor actor);Money getSalary(User user);File openDatabase();Date readDeadline(Project project, User user);
}

在构建者名称中没有动词的位置!

顺便说一句,不仅是名字。 由于其名称不包含动词,因此构建器不应对封装的实体进行任何修改。 它只能创建或找到某些东西并将其返回。 就像纯函数一样 ,它一定不能有任何副作用。

接下来,有“操纵者”(或用迈耶的术语来说是“命令”)。 它们为我们做了一些工作,修改了对象封装的实体。 它们与构建者相反,因为它们实际上是对由对象抽象的世界进行更改。 例如,我们要求Bookshelf向其添加一本新书:

interface Bookshelf {void add(Book book);
}

该方法将书籍添加到存储中。 我们不知道存储将如何精确地修改。 但是我们知道,由于方法的名称是动词,因此会进行修改。

另外,操纵器不得返回任何东西。 我们将其视为回应的类型始终是void 。 这主要是为了将代码的命令性部分与声明性部分分开。 我们要么接收对象,要么告诉他们该怎么做。 我们绝不能将这些活动混为一谈。

这些规则的目的是使代码更简单。 如果您遵循它们,并且所有构建器仅返回对象,而机械手仅修改世界,则整个设计将变得更易于理解。 方法将更小,其名称更短。

当然,通常很难找到这些名称。 您有时会想从操纵器中返回一些东西,或者让您的构建器进行一些更改,例如对缓存进行更改。 试着抵制这种诱惑并坚持原则:方法要么是构建器,要么是操纵器,中间没有东西。 上面的示例相当原始,现实生活中的代码要复杂得多。 但这就是原理将帮助我们的事情-使代码更简单。

我也知道名词/动词原则,该原则建议始终将类命名为名词,而将其方法命名为动词。 我认为这是一个错误的主意,因为它不会将制造商与操作员区分开,并鼓励我们始终根据命令性指令进行思考。 我相信,即使我们有时不得不从其他对象获取它们,而不是通过构造函数实例化它们,OOP也必须更多地涉及对象的声明性组合。 这就是为什么我们在大多数情况下确实需要构建器的原因,并且还必须看到它们与其他方法(操纵器)之间的明显区别。

翻译自: https://www.javacodegeeks.com/2018/08/builders-and-manipulators.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】国家开放大学2021春1376机械制造装备及设计题目

试卷代号:1376 2021年春季学期期末统一考试 机械制造装备及设计 试题 2021年7月 一、单项选择题(从所给的四个选项中,找出你认为是正确的答案,将其编号填入括号内。每小题3分,共30分) 1.卧式支承的机床重心…

【渝粤题库】国家开放大学2021春1398分析化学(本)题目

试卷代号:1398 2021年春季学期期末统一考试 分析化学(本) 试题(开卷) 2021年7月 一、单项选择题(每题2分,共60分) 1.下列叙述错误的是( )。 A.偶然误差影响分…

【渝粤题库】国家开放大学2021春1359高级英语写作题目

试卷代号:1359 2021年春季学期期末统一考试 高级英语写作 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完…

【渝粤题库】国家开放大学2021春1373特殊教育概论题目

试卷代号:1373 2021年春季学期期末统一考试 特殊教育概论 试题 2021年7月 一、解释下列概念题,并举例说明(本题总分25分,每小题5分) 1.特殊教育: 2.教育诊断: 3&#x…

串行内存消耗 并行内存_如何估算内存消耗?

串行内存消耗 并行内存这个故事可以追溯到至少十年之前,当时我第一次接触PHB时遇到一个问题:“在生产部署中,我们需要购买多大服务器”。 我们正在构建的新的,闪亮的系统距离生产开始还有9个月的时间,显然该公司已承诺…

【渝粤题库】国家开放大学2021春1377理工英语3题目

试卷代号:1377 2021年春季学期期末统一考试 理工英语3 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考…

【渝粤题库】国家开放大学2021春1400机器人技术及应用题目

试卷代号:1400 2021年春季学期期末统一考试 机器人技术及应用 试题 2021年7月 一、单项选择题(每小题3分,共45分) 1.以下具有越障能力的轮系是( )。 A.锥形轮、变形车轮、半步行轮 B.全向轮、变形车轮、半步…

Java,JavaFX的流畅设计风格滑块

JMetro的Java,JavaFX主题版本刚刚提高到4.2版。 此版本为Slider控件带来了新样式。 除此之外,您现在还可以看到一个弹出窗口,向您显示滑块的当前值。 新滑块样式 以下是旧的JMetro Slider样式: 滑块OLD JMetro灯光主题 滑块OLD…

【渝粤题库】国家开放大学2021春1443卫生信息与文献检索题目

试卷代号:1443 2021年春季学期期末统一考试 卫生信息与文献检索 试题(开卷) 2021年7月 一、单项选择题(每小题2分,共50分,每小题仅有一项答案正确,请将正确答案的序号填在括号内) 1.…

【渝粤题库】国家开放大学2021春1703农村发展理论与实践题目

试卷代号:1703 2021年春季学期期末统一考试 农村发展理论与实践 试题 2021年7月 一、单选题(20题,每题3分,共60分) 1.在农村发展的“参与式方法”中,“参与”意味着有相应的机制保障( &#xff…

【渝粤题库】国家开放大学2021春1375Matlab语言及其应用题目

试卷代号:1375 2021年春季学期期末统一考试 Matlab语言及其应用 试题 2021年7月 一、单选题(12小题,每小题3分,共36分) 1.如果想将矩阵A第2行第3列的元素改为66,可以通过( )语句来完…

【渝粤题库】国家开放大学2021春1379人文英语3题目

试卷代号:1379 2021年春季学期期末统一考试 人文英语3 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考…

如何利用ide进行跟踪调试_使用调试器进行事后跟踪

如何利用ide进行跟踪调试我最近一直在使用的大多数调试器的好功能是能够在断点上记录信息。 这对于理解代码而无需修改是非常有用的,因为它涉及字节码修改。 让我们考虑一下这种非常琐碎且效率低下的函数实现,以返回斐波那契数列中的第n个数字。 publi…

在树洞里,渝粤题库在线整理

在树洞里 在树洞里,我看到了一些领国家助学金的同学大手大脚,也看到了一些同学好像并不困难,我更看到了许多拿了学校的奖励,可是连写感谢信都不愿意写,觉得很麻烦的同学。我想把我的故事讲给你们听。 我来自单亲家庭…