云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

MySQL数据库_镇江域名注册_免费1年

小七 141 0

MySQL数据库_镇江域名注册_免费1年

本博客介绍了6部分系列的第4部分,即如何在ABAP中使用面向对象的设计模型。

第1部分-将简单的过程模型转换为等效的OO设计,重点介绍封装和抽象的OO原则。

第2部分-通过重构程序来进一步探索抽象将选定的静态类转换为可实例化类。

第3部分-进一步重构程序,以利用继承的OO原则。

第4部分-坚持单一责任原则,对程序进行优化,什么叫大数据云计算,将每个类限制为只执行其预期的操作。

第5部分-删除不再服务于某个类的类目的。

第6部分-引入单例OO设计模式,消除所有静态类。

回顾前面的博客,淘客推广,我们在三个报表类中使用了一个代码重复的程序,并合并了重复的代码,通过使用继承使三个类都可以使用。以下是我们在上一篇博客中留下的源代码:

打开你最喜欢的ABAP编辑器,复制这个ABAP程序,然后将更改应用到具有多重责任的类,并将它们转换为遵循单一责任原则的类。对于那些没有ABAP2XLSX的用户,请使用以下源代码替换类excel\u spreadsheet\u manager:

并在报表语句后包含以下本地异常类定义:

动机

了解面向对象的设计原则封装、抽象和继承是一回事,并在我们的编程工作中有效地使用它们,就像我们到目前为止在示例程序中所做的那样。学习面向对象编程的先驱们所发现的软件维护课程是另一回事。这些先驱之一是罗伯特·C·马丁(https://en.wikipedia.org/wiki/Robert\u C.\u Martin),他的软件维护经验使他定义了坚实的原则(https://en.wikipedia.org/wiki/SOLID),分别为:

单一责任原则开闭原理Liskov替换原则界面分离原则依赖倒置原则

在软件行业被亲切地称为Bob叔叔,他在2000年的论文《设计原则和设计模式》中定义了坚实的原则(\ u oriented\ u design/materials\ u adicionals/principles\ u and\ u patterns.pdf). 这些被称为SOLID原则,因为每个原则的第一个字母都是SOLID的缩写。这些坚实的原则已经被许多面向对象设计学者所接受,作为保持面向对象软件灵活性和可维护性的好建议。现在,我们将重点讨论这些原则中的第一个:单一责任原则。

单一责任原则

根据面向对象设计的原则()单一责任原则规定:

一个班级应该有一个,而且只有一个,更改原因。

目前我们的航班报告、承运商报告和订票报告类都执行类似的处理:

从其各自的持久性存储库中获取用户指示的记录数在ALV报告中显示这些记录安排将这些记录捕获到Excel电子表格的工作表中

如您所见,这些报表类不仅仅是报表–每个类都负责上述三个要点中的每一个,只有第二个涉及到与报表相关的任何内容。因此,这些类违背了单一责任原则——每个类所做的事情都超出了它的类名所暗示的应该承担的责任。

消除多重责任——步骤1

让我们改变程序,让这些类只承担单一责任。我们要做的第一件事是从这些类中删除检索要在报表中显示的记录的责任。使用如下所示的骨架类定义一个名为flight\u records\u retriever的新静态类,将这个新类放在endinterface语句之后。

此时语法检查应该通过。现在做如下修改:

将class flight\u report的方法produce\u report中的select语句移到新的retrieve records语句中,用record\u stack替换实际参数flight\u stack。用对这个新方法的调用替换从方法produce\u report中删除的行,如:

此时语法检查应该通过。这一更改并不能完全解决航班报告仍负责检索其报告中显示的记录的问题,但这是实现这一目标的第一步。

接下来,对舱位承运人报告和订舱报告进行与舱位航班报告相同的相对更改,包括创建两个新的类分别称为carrier\u records\u retriever和booking\u records\u retriever,将每个新类放在类excel\u spreadsheet\u manager前面。

此时语法检查应通过。此时执行程序应证明其仍能正常工作

消除多重责任-步骤2

下一步,更改类报表的方法生成报表的签名:

不再接受导入参数行计数。它现在接受一个名为record\u stack的更改参数,定义为type standard table.

应用这些更改后,该方法的定义应如下所示:

由于引用了参数row\u count,现在在class flight\u report的produce\u report方法中的语法检查将失败,不再在此方法的签名中定义。将此方法更改为:

将data语句移到类进程驱动程序的方法驱动程序进程中的create object语句之前,将其类型更改为表示不是sflight的标准表,而是键入flight\U records\U RETRIVER=>record\U list。将调用移动到方法retrieve\u records of class flight\u records\u retriever,以遵循class process\u driver的方法drive\u process中的create object语句。对于调用方法present\u report时使用的形式参数record\u stack,软件企业管理,请将实际参数从flight\u stack更改为record\u stack。对于调用方法copy\u table\u to class excel\u spreadsheet\u manager\u excel\u worksheet时使用的形式参数source\u stack,将实际参数从flight\u stack更改为record\u stack.

之后,class flight\u report的方法produce\u report中的代码如下:

Next,对class carrier\u report和booking\u report进行与class flight\u report相同的相对更改。

然后在class process\u driver的method drive\u process中,更改try语句后面的三个call方法语句,使每一个: