在 spring 的项目中,是返回实体(entity) 还是 dto 好 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
glacial
V2EX    Java

在 spring 的项目中,是返回实体(entity) 还是 dto 好

  •  1
     
  •   glacial 2020-12-03 13:22:46 +08:00 4572 次点击
    这是一个创建于 1774 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 老铁 你们在做项目的时候是怎么返回的信息的

    1. 返回 entity 的好处不用创建很多个 dto 可以节省时间 修改字段时只用修改一处即可

    2. dto 不用暴露过多的字段 当然了可以通过 JsonIgnore 去控制 ,只是不能跟据不同的业务场景去控制字段显示, 缺点是 修改字段后都得去修改对应的 to , 如果用的是 jpa 还得进行转换

    只想的这些 欢迎补充

    16 条回复    2020-12-04 10:11:42 +08:00
    comsweetcs
        1
    comsweetcs  
       2020-12-03 13:27:21 +08:00   1
    DTO...数据传输对象。你说的一般是返回 VO 才对,dto 一般是用来区分前端像后端的传输吧。。。
    chendy
        2
    chendy  
       2020-12-03 13:43:22 +08:00
    业务简单直接的话,用 entity 可以
    业务复杂之后,业务 /展示 和 实体耦合一起有时候会比较难受,拆 dto 会舒服一些
    IMCA1024
        3
    IMCA1024  
       2020-12-03 13:53:31 +08:00
    request 实体->DTO 实体->entity 实体->VO 实体->response 实体

    目前我们转了很多层。。。
    anakinsky
        4
    anakinsky  
       2020-12-03 13:54:50 +08:00
    我们公司微服务内部调用的返回都是 entity,给前端的都是按需封装成 VO 返回
    glacial
        5
    glacial  
    OP
       2020-12-03 14:17:22 +08:00
    @comsweetcs 得看自已业务 这个没有强制要求 我不要弄那么多层 所以 只用 dto 就可以了
    glacial
        6
    glacial  
    OP
       2020-12-03 14:18:02 +08:00
    @IMCA1024 那你们 维护起来不是很 麻烦
    ericgui
        7
    ericgui  
       2020-12-03 14:20:23 +08:00
    @IMCA1024 慢不?
    idoggy
        8
    idoggy  
       2020-12-03 14:20:58 +08:00 via Android
    你底层 orm 怎么弄的,一张表一个 class 的就弄成 dto 自己用的时候再封装成 entity
    liuch
        9
    liuch  
       2020-12-03 14:23:41 +08:00
    取决于你的项目复杂度。复杂的项目有很多层,不是查库出来就能返回的,这种不只有 dto,vo
    gaoli1992
        10
    gaoli1992  
       2020-12-03 14:30:10 +08:00
    规范角度来说不应该返回 entity 实体,逼近 entity 中包含主建、创建时间、更新时间等信息,而这些信息不应该让前端知悉的。
    IMCA1024
        11
    IMCA1024  
       2020-12-03 16:09:11 +08:00
    @ericgui 慢倒是不慢 多层转换
    IMCA1024
        12
    IMCA1024  
       2020-12-03 16:11:04 +08:00
    @glacial 确实是。但没办法 规定
    Java,微服务
    我们 Feign 接口打 client 包 接参 request 返回 response
    controller 传到 service 用 DTO
    mapper 返回 vo
    comsweetcs
        13
    comsweetcs  
       2020-12-03 16:35:59 +08:00
    @glacial 可能你的业务比较简单吧.像很多 Model 里的字段,其实前端确实没必要字段,比如一些时间字段等。使用 VO 或者你爱咋叫都行,重点是把这部分信息屏蔽,一来可以做安全控制,二来减少网络传输数据量,三来传得更快。我们用的就是 jpa,转换有一套成熟的代码封装方案吧,单体用 BeanUtils,数组列表用 DozerMapper 吧,自己再封装下,也没多麻烦。。。
    Cbdy
        14
    Cbdy  
       2020-12-03 16:37:20 +08:00
    BuffDog
        15
    BuffDog  
       2020-12-04 09:29:07 +08:00
    哎,这种场景,C#的匿名对象是真的香,虽然 java 使用 map 能实现类似的操作,但还是太麻烦了
    Alex5467
        16
    Alex5467  
       2020-12-04 10:11:42 +08:00
    entity 数据包含前端不需要的数据,而且也不全啊!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2430 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 15:34 PVG 23:34 LAX 08:34 JFK 11:34
    Do have faith in what you're doing.
    ubao 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