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

云服务器_小葵云服务器_免费领

小七 141 0

引言

我想提出一种新的设计模式,用以组织ABAP面向对象开发和单元测试的通用方式。

这种设计模式是基于接口和工厂设计模式。

它有以下重要特点

它能做什么

这种设计模式包含两个关键组成部分。

在进入理论之前部分,让我们看看这个设计模式在程序和类中的用法。

有一个通用的跨客户端定制表ZANDERS\u IF\u IMPL for design time class name configuration。

下面是一个示例

一个表ZANDERS\u条目IF\u IMPL

有一个通用的BADI ZANDERS\u IF for run time class name确定

BADI定义与实现

运行程序ZANDERS\u TEST\u BUS1时

有三组数据演示工厂类ZAND\u CF\u对象的功能

以第一组为例

出现调试窗口时,我们将看到变量lr\u bus1的类名是ZANDERS\u CL\u bus1.

接口实现类名

这个程序的行为是对于相同的接口ZANDERS\u IF\u bus1,对于不同的数据集,可以使用三个不同的类:

此功能为根据数据属性自定义编码逻辑提供了惊人的灵活性。

有一个类ZANDERS\u CL\u BUS1\u ENH,物联网时代,它使用接口ZANDERS\u IF\u BUS1。

在方法MY\u DISPLAY中,接口实例有本地临时使用

本地临时实例

如果你有单元测试的经验,你会知道这里的问题

使用test double,本地对象必须升级到类级属性

在实现单元测试时,你必须回到你真正的编码去做一些改变。

你有这样不愉快的经历吗?

然而,返利联盟,对于这个类来说,奇怪的是,全民淘客,当你进行单元测试时,它成功地通过了。

秘诀是使用injector类。

这个特性省去了你在创建单元测试时返回修改编码的麻烦。

设计思路

现在是时候看看理论部分了。

下图显示了此设计模式的体系结构。

设计概述

让我从实际编码过程的起点来解释设计。

需要显示业务数据。

因此创建了一个只有一个方法显示的接口ZANDERS\u IF\u BUS1。

此接口应包括(继承)通用接口ZANDERS\u IF\u OBJ\u INIT,用于初始化class对象。

通常,下一步是创建实现接口的类。

因此创建了三个类(上图中仅显示两个类作为Visio页面大小的限制)。

类有三个规则:

以ZANDERS\u CL\u BUS1类为例,其配置如下图所示:

第1条为班级

第2条为班级

第3条为班级

最后,让我们在程序ZANDERS\u TEST\u BUS1中使用这些类。

报告代码

在第17行中,有一个对静态方法的调用:ZANDERS\u cf\u object=>inst\u by\u infname

来获取接口实例。

这个方法有三个参数:

这里,为了简单和通用,我只使用两个组件KEY1和KEY2来表示关键字段。

3。CV\u DETAILS是类对象的初始化数据。

注意这是一个变化的参数。

这意味着可以根据需要改变初始化数据。

让我们进入这个方法的编码细节。

编码细节

逻辑可以分为两部分:

获取类名有三个步骤。

通过替换将"IF"与"CL"串在一起以获取默认类名。通过读取自定义表ZANDERS\u IF\u IMPL获取静态设计时配置名称。通过调用BADI ZANDERS\u IF获取动态运行时名称

当类名最终确定时,在第34行创建实例

在第35行调用接口方法ZANDERS\u IF\u OBJ\u INIT~INIT对类实例进行初始化

使用BADI ZANDERS\u IF时,不仅可以确定类名但也要更改初始化数据cv\u细节。

运行程序ZANDERS\u TEST\u BUS1,KEY1=1,KEY2=3,您将清楚地了解这个BADI的工作原理。

此设计模式的组件

此设计模式所需的开发组件:

跨客户端定制表ZANDERS\u IF实现。

其关键字段有两部分:

BADI ZANDERS\u IF with KEY1和KEY2用作过滤器。

BADI

通用接口所有类实例初始化的ZANDERS\u IF\u OBJ\u INIT。用于所有接口创建的通用工厂类ZANDERS\u CF\u对象。通用注入器类ZANDERS\u CF\u OBJECT\u I用于所有单元测试。

如何应用它

如果您希望将此设计模式应用于您的应用程序,淘客返利app,请遵循以下步骤。

确定您业务场景的通用密钥。在命名空间中创建所需的组件,并用键替换键1和键2。创建界面。创建实现接口的类(受保护的实例)。将工厂类添加为类的朋友(在我的示例中是ZANDERS\u CF\u对象)。无论在何处使用此接口,都必须使用factory类来获取实例。在单元测试中,使用您的injector类(我的示例是class ZANDERS\u CL\u BUS1\u ENH)

Summary

此设计模式基于两种常见的面向对象技术,即。,云服务器商,接口和工厂类。

它还结合了ABAP编程特性,提供了一种通用灵活的方法来选择正确的运行时类。

它提供了一种通用的方法来注入测试双接口实例,使您的单元测试工作更容易。

最后,我希望您已经理解清楚了。