正在进行的结构或javascript / json对象ABL?

时间:2016-07-25 16:12:52

标签: progress-4gl openedge

我们正在迁移到11.6,我认为这是重新思考旧习惯和改进一些概念的好时机。

其中一个是我们在函数和过程中处理参数定义的方式。

我们经常会有需要大量参数的程序和功能,无论是输入还是输出。就个人而言,出于可读性和可维护性的原因,我不喜欢有明确声明过多参数的方法。

为了避免这个问题并且仍然允许大量参数,我们手动实现了一个带有单个参数的键值对方法。

但这种方法存在一些缺点:

  • 仅通过检查无法确定需要哪些参数 方法签名。
  • 您将始终需要一些样板代码,例如推送和提取值的方法。

所以说,我想听听别人的想法。 你有没有实现类似的东西?

ABL中是否可以作为javascript / json对象使用?

当前实施。

DEFINE VARIABLE param as CHARACTER NO-UNDO.

addValue('id', '1', param).
addValue('date', STRING(TODAY), param).

RUN internalProc (INPUT param).

所需的实施

param.id   = 1
param.date = TODAY

RUN internalProc (INPUT param)  

1 个答案:

答案 0 :(得分:3)

由于您提到11.6,为什么不使用基于真实类的对象(自10.1A起可用)。

yourpackage \ yourparameter.cls:

CLASS yourpackage.yourclass: 

    DEFINE PUBLIC PROPERTY date AS DATE NO-UNDO 
    GET.
    SET. 

    DEFINE PUBLIC PROPERTY id AS INTEGER NO-UNDO 
    GET.
    SET. 

    CONSTRUCTOR PUBLIC yourclass ():
        SUPER ().

    END CONSTRUCTOR.

    CONSTRUCTOR PUBLIC yourclass (pid AS INTEGER, pdate AS DATE):
        SUPER ().

        ASSIGN THIS-OBJECT:id = pid
               THIS-OBJECT:date = DATE . 

    END CONSTRUCTOR.

END CLASS.

和内部程序:

DEFINE INPUT PARAMETER poParameter AS yourpackage.yourclass NO-UNDO .

和来电者:

DEFINE VARIABLE o AS yourpackage.yourclass NO-UNDO.

o = NEW yourpackage.yourclass().
o:id = 42.
o:date = TODAY.

RUN internalProc (o) . 

替代来电者:

RUN internalProc (NEW yourpackage.yourclass (1, TODAY)) .

ABL提供10.1A的完整OO功能,可以与程序代码很好地混合。参数对象(结构)是在遗留代码中开始使用一些初级类的好方法。