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

SpringMVC 的后端,前端需要传一个比较复杂的数据过来,但后端不打算在 DAO 层为它设 pojo 类,那在 Controller 中为它设一个内部类是好的处理办法么?

  •  
  •   Newyorkcity · 2021-03-15 10:54:10 +08:00 · 1421 次点击
    这是一个创建于 1349 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是这个数据比较复杂,当然,形式还是定死的,理论上是能创建一个对应的 pojo 的。
    但因为这个数据不会进入数据库,所以在 DAO 层为它创建一个 pojo 类感觉不对。

    所以要不然 controller 上对应的方法使用 Map 作为参数类型来接收?或者内建一个内部类对应?我是想采用后者,不知道有没有什么毛病?另外如果用后者,这个内部类有必须要静态吗?

    谢谢
    17 条回复    2021-03-15 18:26:55 +08:00
    boris93
        1
    boris93  
       2021-03-15 10:57:04 +08:00 via iPhone   ❤️ 2
    建个 VO 类用来接数据啊,controller 层接收这个 VO,然后处理
    绝对不要用 map 传参,用起来一时爽,等你发现看不懂就晚了
    0xC000009F
        2
    0xC000009F  
       2021-03-15 11:01:15 +08:00   ❤️ 1
    我觉得越是复杂的参数越应该建一个 VO 来管理
    Newyorkcity
        3
    Newyorkcity  
    OP
       2021-03-15 11:03:03 +08:00
    @boris93
    @0xC000009F
    查了一下 VO,感觉是建议为它设一个专门类的意思。那这个类可以放在 Controller 内部么?或者还是扔到 DAO 层用 VO 结尾?
    egfegdfr
        4
    egfegdfr  
       2021-03-15 11:14:34 +08:00   ❤️ 1
    内部类 可以放在 controller 里面,但是看你们描述,说明这个类变量不少,所有能单独处理,尽量就单独出来,减少不必要的关联,放 dao 包下面以 vo 结尾也行,如果是 vo 类比较多,起一个 vo 包 所有的 vo 类放里面也可以,具体看你项目了
    boris93
        5
    boris93  
       2021-03-15 11:24:37 +08:00 via iPhone   ❤️ 1
    @Newyorkcity #3 我们一般是建个 vo 的 package,然后放在这里面
    不建议作为内部类放在 controller 里面,影响可读性,一般来说这种数据对象跟业务逻辑是分开放在不同位置的,易读而且好管理
    lyusantu
        6
    lyusantu  
       2021-03-15 11:35:00 +08:00   ❤️ 1
    @RequestBody JSONObject json
    340244120w
        7
    340244120w  
       2021-03-15 12:13:18 +08:00 via iPhone
    就这一个 Controller 用得话,静态内部类是坠吼的。我甚至还喜欢内部类套娃
    EscYezi
        8
    EscYezi  
       2021-03-15 12:44:11 +08:00 via iPhone   ❤️ 1
    @lyusantu #6 (回复点错成感谢了) JSONObject 一时爽,后期维护火葬场
    boris93
        9
    boris93  
       2021-03-15 12:59:38 +08:00 via iPhone
    @lyusantu #6 fucking never write shit like this
    yalin
        10
    yalin  
       2021-03-15 13:01:28 +08:00
    DTO
    Macolor21
        11
    Macolor21  
       2021-03-15 13:03:12 +08:00   ❤️ 1
    额,创建一个 ValueObject 就可以,你想了解更多的话《领域驱动设计》这本书可以帮助你学习系统的建模知识。
    wangxiaoaer
        12
    wangxiaoaer  
       2021-03-15 13:06:41 +08:00
    DTO:data transfer object 专门为了应对你这种场景的。
    lyusantu
        13
    lyusantu  
       2021-03-15 14:04:36 +08:00
    @EscYezi
    @boris93 只是为本文描述的数据比较复杂且形式定死的又不愿创建实体对象的单接口推荐一下可以偷懒采用此写法,不代表推荐使用此写法
    zhanggg
        14
    zhanggg  
       2021-03-15 17:11:13 +08:00
    建议面向前端交互用 Vo,面向数据库写 Pojo,中间业务层写个转换的方法。
    千万别 JsonObject 和 Map 这两个数据结构所有 key value 结构都不是显式的,后面他人接手也好还是你自己看也好,都是毒
    cslive
        15
    cslive  
       2021-03-15 18:22:04 +08:00 via Android
    list map 一把梭,就是这么效率
    clf
        16
    clf  
       2021-03-15 18:24:56 +08:00
    VO 类。如果实在是懒,Map<String,Object>走起。
    wolfie
        17
    wolfie  
       2021-03-15 18:26:55 +08:00
    接口全部用 DTO,一个 DO 管理所有接口越写越难受。
    ps:VO 不是渲染的吗。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:07 · PVG 03:07 · LAX 11:07 · JFK 14:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.