V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yumc
V2EX  ›  问与答

Java 业务数据对象的处理问题

  •  
  •   yumc · 2021-02-22 17:37:13 +08:00 · 1095 次点击
    这是一个创建于 1397 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述

    有一个业务场景,入参是一个业务大对象,数据结构如下:

    {
        "baseInfo": [
            {},
            {}
        ],
        "headInfo": [
            {},
            {}
        ],
        "bodyInfo": [
            {},
            {}
        ],
        "footInfo": [
            {},
            {}
        ],
        ...
        "xxxInfo": [
            {},
            {}
        ]
    }
    

    其中的"xxxInfo"数组都可以是空数组或空值,最多会有 15 个左右不同的"xxxInfo"对象类型,后端 Java 程序接收到参数之后需要对存在的信息都进行业务处理,有通用的处理,也有特殊的处理。

    目前后端是使用Map<String, List<JsonObject>>进行接收,之后转换为Map<String, List<XxxInfo>>,直接遍历该 map 进行通用业务处理,通过map.get(xxx)取得指定成员进行特殊处理。

    但是使用Map以及JsonObject这种结构来收参传参是我比较抗拒的,个人觉得不够优雅不够高效,所以想换种接收并处理数据的实现方式。

    初步设想

    直接使用大 Java 对象接收参数,大对象中包含所有可能出现的 List<XxxInfo>成员。但是这样做失去了使用 Map 结构时易于处理通用业务的优点了。

    问题

    1. 那种数据结构更合理呢?除了以上两种方式,有没有更合适的数据结构呢?

    2. 如果使用我提到的使用 Java 大对象,那么如何处理通用业务逻辑更合适呢?

      • 通过反射的方式实现遍历所有成员进行通用业务处理?

      • 硬编码处理?

    非常感谢各位答疑解惑,一起讨论

    3 条回复    2021-02-22 22:14:00 +08:00
    LongMaoz
        1
    LongMaoz  
       2021-02-22 17:55:04 +08:00
    反射呗。。。。
    miv
        2
    miv  
       2021-02-22 18:00:16 +08:00
    用 js 就没这个问题了[狗头]
    lraining
        3
    lraining  
       2021-02-22 22:14:00 +08:00 via Android
    接收参数反射成对象只能是单个对象,如果是 list,就没办法用.class,只能是通过 map 把对象 json 传过来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2743 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:25 · PVG 20:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.