V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lauyukit
V2EX  ›  程序员

当字段较多且经常需要新增字段时,用 JSON 代替 POJO 是否更加合适?

  •  
  •   lauyukit · 2020-09-14 14:35:22 +08:00 · 1805 次点击
    这是一个创建于 1292 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位大佬们,小弟在重构一个项目,因为业务需要,一些 POJO 实体类有很多字段,而且随着时间和业务变化,会增加各种不同的字段,老代码里都是用 JSONObject 一把梭,我觉得这样很不好,一来没有辨识度,没法通过静态分析发现问题,二来很不优雅;可是定义 POJO 的话,又因为字段多变,可能需要成员变量里加一个 Map 来扩展,不然每新增一个字段就得通过继承或者定义新 POJO 来做了。不知道大佬们有没有更好的办法?
    11 条回复    2020-09-17 10:44:08 +08:00
    hyperbin
        1
    hyperbin  
       2020-09-14 15:07:19 +08:00 via Android
    改成字段存数据库
    freebird1994
        2
    freebird1994  
       2020-09-14 15:09:22 +08:00
    我们现在是这样的。因为是 2b 的业务,平台方有些字段传入会有差异,差异的字段都是放在 map 里
    qwerthhusn
        3
    qwerthhusn  
       2020-09-14 15:13:37 +08:00
    有需要搜索,排序的字段得用单独的字段和单独的数据库列
    其他的,尤其是后台基本上连看都不看直接扔前台的,可以弄到 extend_params 里面,json 就行
    我是这么感觉
    liuxey
        4
    liuxey  
       2020-09-14 15:23:03 +08:00
    我更好奇字段这么多变,数据库怎么设计? NoSQL ? JSON 列?
    lauyukit
        5
    lauyukit  
    OP
       2020-09-14 17:21:53 +08:00
    @qwerthhusn 那看来都是这么处理了
    lauyukit
        6
    lauyukit  
    OP
       2020-09-14 17:22:21 +08:00
    @freebird1994 嗯嗯,我也是这么想的,公共的提取出来,差异化的放 map 里
    lauyukit
        7
    lauyukit  
    OP
       2020-09-14 17:22:58 +08:00
    @liuxey 我目前想到的是 JSON 列,或者转 String
    saulshao
        8
    saulshao  
       2020-09-14 22:59:25 +08:00
    我之前的方法都是弄个保存列名的表。
    等到需要的列要大量查询的时候再把这个字段转到普通的表里面去。
    srlp
        9
    srlp  
       2020-09-15 00:46:17 +08:00 via iPhone
    protobuffer
    Nillouise
        10
    Nillouise  
       2020-09-15 11:56:55 +08:00
    用 map 存储说明你不会使用该字段进行逻辑处理,那么存在数据库的 json 字段应该是可以的。

    涉及逻辑处理你当然得用一个 field 存储(数据库中需不要单独字段另说),多定义一个 pojo 不是什么大问题,因为不同得的逻辑层需要不同样的 vo 是很正常的。
    lauyukit
        11
    lauyukit  
    OP
       2020-09-17 10:44:08 +08:00
    @Nillouise 还是要逻辑处理的,我现在是打算根据父类的 type 来把对象转成子类去调用,但是数据库那边的表是按父类来设计,另外加一个 extra 字段,以 json 形式来存子类的成员
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2909 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:16 · PVG 22:16 · LAX 07:16 · JFK 10:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.