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

2021 年 3 月 15 日
 Newyorkcity
就是这个数据比较复杂,当然,形式还是定死的,理论上是能创建一个对应的 pojo 的。
但因为这个数据不会进入数据库,所以在 DAO 层为它创建一个 pojo 类感觉不对。

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

谢谢
1702 次点击
所在节点    问与答
17 条回复
boris93
2021 年 3 月 15 日
建个 VO 类用来接数据啊,controller 层接收这个 VO,然后处理
绝对不要用 map 传参,用起来一时爽,等你发现看不懂就晚了
0xC000009F
2021 年 3 月 15 日
我觉得越是复杂的参数越应该建一个 VO 来管理
Newyorkcity
2021 年 3 月 15 日
@boris93
@0xC000009F
查了一下 VO,感觉是建议为它设一个专门类的意思。那这个类可以放在 Controller 内部么?或者还是扔到 DAO 层用 VO 结尾?
egfegdfr
2021 年 3 月 15 日
内部类 可以放在 controller 里面,但是看你们描述,说明这个类变量不少,所有能单独处理,尽量就单独出来,减少不必要的关联,放 dao 包下面以 vo 结尾也行,如果是 vo 类比较多,起一个 vo 包 所有的 vo 类放里面也可以,具体看你项目了
boris93
2021 年 3 月 15 日
@Newyorkcity #3 我们一般是建个 vo 的 package,然后放在这里面
不建议作为内部类放在 controller 里面,影响可读性,一般来说这种数据对象跟业务逻辑是分开放在不同位置的,易读而且好管理
lyusantu
2021 年 3 月 15 日
@RequestBody JSONObject json
340244120w
2021 年 3 月 15 日
就这一个 Controller 用得话,静态内部类是坠吼的。我甚至还喜欢内部类套娃
EscYezi
2021 年 3 月 15 日
@lyusantu #6 (回复点错成感谢了) JSONObject 一时爽,后期维护火葬场
boris93
2021 年 3 月 15 日
@lyusantu #6 fucking never write shit like this
yalin
2021 年 3 月 15 日
DTO
Macolor21
2021 年 3 月 15 日
额,创建一个 ValueObject 就可以,你想了解更多的话《领域驱动设计》这本书可以帮助你学习系统的建模知识。
wangxiaoaer
2021 年 3 月 15 日
DTO:data transfer object 专门为了应对你这种场景的。
lyusantu
2021 年 3 月 15 日
@EscYezi
@boris93 只是为本文描述的数据比较复杂且形式定死的又不愿创建实体对象的单接口推荐一下可以偷懒采用此写法,不代表推荐使用此写法
zhanggg
2021 年 3 月 15 日
建议面向前端交互用 Vo,面向数据库写 Pojo,中间业务层写个转换的方法。
千万别 JsonObject 和 Map 这两个数据结构所有 key value 结构都不是显式的,后面他人接手也好还是你自己看也好,都是毒
cslive
2021 年 3 月 15 日
list map 一把梭,就是这么效率
clf
2021 年 3 月 15 日
VO 类。如果实在是懒,Map<String,Object>走起。
wolfie
2021 年 3 月 15 日
接口全部用 DTO,一个 DO 管理所有接口越写越难受。
ps:VO 不是渲染的吗。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/761695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX