2016-07-25 66 views
0

我们正在迁移到11.6,我认为这是重新考虑旧习惯并改进一些概念的好时机。结构或javascript/json对象正在进行中ABL?

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

很多时候,我们有需要大量参数(输入或输出)的程序和函数。就个人而言,出于可读性和可维护性原因,我不喜欢具有明确声明太多参数的方法。

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

但也有一些缺点,这种方法:

  • 这是不可能告诉这是刚刚通过检查 方法签名需要的参数。
  • 您将始终需要一些样板代码,例如推拉值的方法。

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

有什么可以在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) 

回答

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功能,可以很好地与程序代码混合使用。参数对象(结构体)是开始使用遗留代码中一些初始类的好方法。

+0

这是一个选项,但它可能会增加一个简单任务的复杂度。我会记住这一点。我只是在这里查看关于.net的字典。你知道这可以做到这一点吗? –

+0

你在哪里看到复杂性? –

+0

也许复杂性并不是解决这个问题的方法。但是在一个大型应用程序中,我需要上百个这样的类。因为,你知道,参数在任何地方。 –