暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AS400银行核心系统开发中的技术总结--数据字典和枚举值

小代嘚吧嘚 2022-02-14
736


本文共1997字 | 建议阅读时间:5分钟

作者:张广


       这篇文章来自前辈张广的分享,经过笔者同意后首发于微信公众号平台:小代嘚吧嘚,专注于分享银行业务&技术知识,欢迎多交流。


       本文以AS400银行核心系统中数据字典和枚举值的实践案例为出发点,详细介绍相关技术实现方式和实践效果。如果您有自己的想法和经验,欢迎探讨,谈谈看法!


我们分三个部分来谈:

一、背景介绍

二、数据字典的实现方式

三、数据字典中的枚举值


1

  背景介绍


在核心系统应用开发中,数据字典有举足轻重的作用。数据字典是对系统中所有字段的归纳抽象,需要规范同类字段的类型长度,方便定义和修改。


但是,在过去的核心系统中,数据字典的理解往往也会有失误。常见的错误方法,是试图穷举定义所有可以出现的字段名字。可是实际上核心系统应用程序内容是不断扩充的,功能和交易程序都在不停增加,所用到的字段也是无穷无尽。如果需要列举的是所有字段,就像建巴比伦塔一样困难。而且不可避免会出现账号1到账号9这样的重复。


在Firebird系统中,数据字典的使用方式回归了本源意义,即数据字典定义的是不重复的字段基础类型。


举例来说,“日期”就是一个基础类型,归数据字典管理。而“交易日期”,“开户日期”这些字段,都只是使用基础类型定义出来的具体字段变量,不归集到数据字典管理,但命名上要求具体字段必须以数据字典基础类型结尾,体现归属关系。“日期”在数据字典里定义的是WKDT,“开户日期”起名可以叫OPWKDT,“交易日期”起名可以叫TRWKDT,不同场景中也可以起名不一样。这样的数据字典和字段命名规则,既满足应用系统字段的不断扩充,又保持数据字典的精简和稳定。


2

  数据字典的实现方式


数据字典的实现方式,是建立一个DICT的PF文件并编译,里面的内容即是所有基础类型的定义。摘录部分如下所示。



为了与实际应用程序中的字段名区分,数据字典中的基础类型字段名以@@开头。


在表结构PF字段定义,通用结构定义,交易、组件输入输出接口PF字段定义时,就可以参照数据字典了。


以尾箱凭证登记表ACNVCBB为例展示如下。


以尾箱主表ACNBXBX为例展示如下。 


从上面的例子可以看出,PF定义中首先要REF(DICT)引入数据字典,然后定义具体字段时候,REFFLD指明数据字典的基础类型字段。注意的是命名规范要求,具体字段的后4位必须和数据字典基础字段名字一致。


这样在程序中可以轻松认出是哪种类型(这就是应用型匈牙利命名法,有关匈牙利命名法的误解和讨论参见《软件随想录 -- Joel on software》的第23章“让错误的代码显而易见”)。不同的PF字段名字可能会一样,因此在RPG程序中需要QUALIFIED防止重叠,这在后续“命名限定”时候再介绍。 


那么如果在RPG程序中需要参照数据字典定义变量该怎么写呢。这里就需要使用一个新的关键字TEMPLATE,它可以引入一个PF结构但并不分配存储空间。同样让例子程序说话。 



先是D段定义了DICT,引入外部PF结构DICT,并且是QUALIFIED限定为以点访问字段,TEMPLATE指明只声明不分配空间,然后定义变量时就可以用LIKE了。 


3

  数据字典中的枚举值


数据字典除了定义了字段类型长度,还对枚举项列表进行了管理。比如数据字典例子中,@@YNFG就是一个枚举,1表示是,0表示否。在尾箱主表的EQYNFG碰平标志就是用了这个枚举。


在程序中如果写0,1的话,既不便于阅读程序,也不方便枚举值的变化。因此,Firebird中根据DICT自动生成了ENUM这个枚举列表,这样RPG程序中就可以用YNFG_YES代表1,YNFG_NO代表0。摘录DSCPPGM/ENUM这个RPGLE源码部分如下。 



在RPG程序中,通过D/COPY DSCPPGM,ENUM 即可引入数据字典枚举常量。之后就可以 EVAL V_EQYNFG=YNFG_YES 这么写了。 


完。


点击查看近期推送

 

核心银行系统之模拟花呗账单分期

小白科普:“交易(Transaction)”是什么?

核心银行系统之7X24小时不间断运行设计

银行核心系统之贷款-[从一个故事说起]

银行核心系统之分表分区和批处理性能优化

银行核心系统之存款业务(一)


长按下方二维码关注公众号

欢迎加入银行核心系统大本营

一句话介绍:银行IT人写给自己人的公众号!


文章转载自小代嘚吧嘚,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论