云网站服务器_国内数据云存储_移动云数据库服务器主机-搜集站云

轻量服务器_域名注册免备案_返利

小七 141 0

拥有可靠的单元测试不仅能使我们的程序稳定,还能让我们自由地寻找问题,在这里或那里调整东西,甚至进行设计更改。为什么?好吧,软件开发是一个迭代的过程,总是有一些需要改进的地方。

在前面的例子中,inventory类中的search()方法有问题。我鼓励您查看它并找出可能的错误:

该方法将一个guitar对象作为导入参数,由上面的I\u guitar\u to\u search表示。问题是什么?如果你大声说出该方法的实际性能,那么就没有太多意义:

"客户提供了一个吉他对象,云服务器,我们将每个属性与库存中所有吉他的属性进行比较,以找到匹配项"

你真的想象有人去商店买吉他时手上拿着一把现有的吉他吗?当然可以,但大多数时候不会。你去一家商店,告诉售货员你在找某种类型的吉他,品牌x,价格在y范围内,你就知道了。换句话说,客户提供的是规格,而不是真正的吉他实物。因此,我们需要调整我们的设计,因为它不反映现实世界中发生的事情,而面向对象编程是关于对现实世界建模的。所以下次当你发现某段代码没有什么意义,或者某个地方有个bug而你找不到它时,试着大声说出来,最好找个橡皮鸭和它说话。

我自己也没有橡皮鸭,但风暴骑兵总是准备在我愚蠢的时候向我开枪

所以,解决方案是将这些吉他属性封装到一个新对象中。封装是好的,它允许我将我的应用程序分组成逻辑部分,这样我就可以将吉他的泛型属性与实际的吉他对象本身分开。方法应该只做一件事,云服务器报价,它们应该执行您期望它们完成的任务。不多不少。我建议您阅读robertmartin的干净的代码书,这些示例是用Java编写的,但是对于我们ABAP开发人员来说,有太多的东西需要学习,这太神奇了。所以这种搜索方法不仅是搜索库存,也是比较属性,这也是错误的。因此,我们需要找到一种方法来封装这个comparison,而不是search()。

好的,回到新的类,我称之为ZCL\u guitart\u SPEC。它的定义是这样的:

方法matches()实现了您所期望的:比较属性,当它们匹配时返回true,否则返回false:

有了这个,是时候更新因为我们将属性抽象到一个单独的类中。不过,大数据分析培训,更改很小,只需删除builder、type of wood、type of guitar等属性,然后插入ZCL\u guitart\u SPEC对象:

现在让我们回到Inventory类并更新search()方法:

首先我们更改导入参数,以便它接受一个ZCL\u guitart\u SPEC对象

然后在实现部分中,我们更改所有属性看起来很奇怪的代码是这样的:

读起来不是很好吗?matches()方法真好看!如果你来自Java世界,你会特别同意的

那一刻,我们怎么知道我们没有破坏任何东西?我们对原来的设计做了巨大的改变,大数据分析网站,创建了新的类,修改了现有的方法。在正常情况下,这是一件可怕的事情,但这次不是,因为我们有我们的单元测试,只要测试一直通过,我们就可以相信程序是如何运行的。这是纯粹的自由,物联,它给人的感觉是你可以改进任何东西!

单元测试快乐!