Skip to content

六、内部原理

FTK edited this page Jun 2, 2024 · 1 revision

前五个章节从使用者角度列举了工具包的常用功能及使用场景;本章着重介绍工具包的内部原理,从开发者的角度描述整体设计思路和各个功能组件的逻辑关系;帮助你梳理思路,在线上问题跟踪中能够快速定位问题。

报文结构

报文(com.alatka.messages.context.MessageDefinition)由六部分组成唯一标识:报文类型(type)/报文分组(group)/报文代码(code)/报文种类(kind)/[报文子域] (domain)/[报文子域使用标识] (usage);其中 [报文子域]/[报文子域使用标识] 非必须存在。

  1. 报文类型:iso(8583)/fixed(固定格式)
  2. 报文分组:机构标识;例如visa、master、cups、jcb、各银行机构等
  3. 报文代码:例如固定格式交易3004(按卡号查询卡资料信息)、4101(自选卡号选择)等
  4. 报文种类:header(报文头)、request(请求报文)、response(应答报文)、payload(报文体)、subPayload(报文子域)
  5. 报文子域:分页子域、8583各类子域等
  6. 报文子域使用标识:8583 ULV/UV类型子域usage值;例如F48域AA/BC/NK,F59域QL/QD/QR 等

此外,报文中还包括一些全局配置类字段(charset/holder...)和描述类字段(remark)等。

报文域结构

TODO

类结构

TODO

各类型对象生命周期

输入图片说明

对象 生命周期 描述
MessageDefinitionBuilder 加载配置阶段(对象创建 -> build()/refresh()方法调用完成) 报文格式配置加载类
MessageDefinition MessageDefinitionBuilder#build()/refresh() -> 程序结束 报文定义类
FieldDefinition MessageDefinitionBuilder#build()/refresh()-> 程序结束 报文域定义类
MessageDefinitionContext MessageDefinitionBuilder#build()/refresh() -> 程序结束 报文定义Context
DomainParsed 首次解析报文 -> 程序结束 域值解析类
FieldBuilder 首次解析报文 -> 程序结束 域值类型映射类
MessageBuilder 解析一类报文开始 -> 程序结束 报文解析类
MessageHolder 每次解析单笔报文 报文容器类

解析流程

输入图片说明

Clone this wiki locally