向师傅们请教 pojo 类设计的规则。什么时候需要设计一个 pojo 接受参数,什么时候用 map/list 等 - V2EX
mart1nN
V2EX    Java

向师傅们请教 pojo 类设计的规则。什么时候需要设计一个 pojo 接受参数,什么时候用 map/list 等

  •  
  •   mart1nN Aug 21, 2019 4597 views
    This topic created in 2457 days ago, the information mentioned may be changed or developed.

    我目前的理解是每张表需要写一个 pojo 类,然后涉及多张表且参数不固定的用 map

    但是实际上大多数情况下的业务都需要查询 2 张表以上

    请问师傅们是怎么处理的

    12 replies    2019-08-21 20:21:01 +08:00
    taogen
        1
    taogen  
       Aug 21, 2019 via Android
    实体类之间一般是一对一、多对多之类的关系,一般用 object 或 list 关联。不固定操作和实体类操作分开处理。
    xiaoyaojc
        2
    xiaoyaojc  
       Aug 21, 2019
    最好不要用 map 做方法入参和返回参数,后续很难维护。我司查表返回的,如果单表就是 DO,联表就是 PO
    liuhuansir
        3
    liuhuansir  
       Aug 21, 2019
    原则上不是不允许用 map 做入参和出参么?只是 pojo 类数量会爆炸
    glaucus
        4
    glaucus  
       Aug 21, 2019
    我目前的本方法是每个表有两个 pojo 类,一个字段一对一,一个包含各种关联字段,一般新增、修改、删除时用第一个,查询时用第二个
    glaucus
        5
    glaucus  
       Aug 21, 2019
    @glaucus #4 本 --> 笨 ,再补一下,楼主的这种问题在 Kotlin 下更突出,因为 Kotlin 还默认要求字段不能为 null,蹲一个优雅的解决方案
    mart1nN
        6
    mart1nN  
    OP
       Aug 21, 2019
    @liuhuansir 是的,目前来说我还是每次查询都新建一个 pojo 类,一方面也是担心 map 难以维护,另一方面从面向对象的原则来说也应该用 pojo 类,但是 pojo 类的剧增还是让我很不舒服
    caoqiang250
        7
    caoqiang250  
       Aug 21, 2019
    全是 map,list<map>,没写过 pojo 类的路过,写 pojo 太累了。。。。。。
    chendy
        8
    chendy  
       Aug 21, 2019
    楼上全是 map 的老哥是不是公司只有一个人?…
    yyConstantine
        9
    yyConstantine  
       Aug 21, 2019
    @chendy 我表示,我们这里的技术 leader 推崇 map,嫌用 pojo 太冗余,我只能自己默默写 pojo。。
    chendy
        10
    chendy  
       Aug 21, 2019
    除非真的需要 map,否则不要用 map,毕竟不用等别人接手,过段时间自己看都想不起来 map 里传的啥
    pojo 也是跟着分层走的,DataObject 对应数据库表,BussinessObject 对应业务,ViewObject 对应展示,如果用了 ORM 的话 DataObject 有可能不需要,简单场景可能 DataObject 完全够用
    个人经验是,pojo 太多太碎通常是对业务建模不够,导致数据模型不能很好表达业务模型,进而导致难以复用
    caoqiang250
        11
    caoqiang250  
       Aug 21, 2019
    使用 pojo 在后期维护的时候也会出现很麻烦的情况啊,例如某个表加减一些字段,某个接口需要返回的参数发生变化,这种时候不仅需要改 pojo,还要该 sql,而使用 map 直接该 sql 就好,我觉得很省事啊。望后面大佬轻喷。。。。。。(我这边一般会把每个接口接收哪些数据,返回哪些数据整理成 xls 的,所以一般情况下也不太会出现不知道传的啥的情况)
    Takamine
        12
    Takamine  
       Aug 21, 2019 via Android   1
    po 对应表结构,多表关系业务层封装处理拼装 vo,不用完全按领域模型来。
    用 map 的话,感觉接收的字段都显式获取不太优雅,也不利于维护。
    About     Help     Advertise     Blog     API     FAQ     Solana     4510 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 71ms UTC 01:00 PVG 09:00 LAX 18:00 JFK 21:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86