Java 加一个字段很难吗?

2021-09-26 17:24:13 +08:00
 liuidetmks

传输数据 加一个字段非常麻烦, 甚至同一种结构,从 xml 换成 json 返回,就会改动非常大?

难道 java 就没用一种通用的 map 结构表示 字典吗? 加个东西总是有很大抵触?

例如 一个 map

{
   ....
}

在使用的时候 按需取值
var a = map['a']
var b = map['b']
或者从页面 A 直接传一个 map,A 页面不需要关注到底 map 有什么(服务器返回) 到 B 页面, B 页面按需取用。

11201 次点击
所在节点    Java
90 条回复
cw2k13as
2021-09-27 11:41:58 +08:00
@xaplux 不加就不加被,领导问为啥没这个数据,后端说他加不了,
lonenol
2021-09-27 13:11:55 +08:00
如果只是加字段其实是非常简单的。。
但是 xml 的表达能力要远远强于 json 。。想直接转 json 其实是有点难的
zjsxwc
2021-09-27 13:29:06 +08:00
Map 重构火葬场吗?

我觉得使用 map 很正常啊,

就和我写了个接口 interface,你穿过来一个实现 interface 的对象一样正常,只有在重构时我才关心(全局搜索)这个穿过来的对象到底是具体哪个类。
同样的,我由于接口业务问题,我只知道这是个有某些参数的请求数据,后期可能会变,于是我用了 map, 方便后期维护,至于维护时我才关心(全局搜索)这个穿过来的 map 到底有哪些 key 。

有没有问题?

没有问题。
zjsxwc
2021-09-27 13:34:50 +08:00
总不能说我为了灵活性,用了 interface 没写具体类,就火葬场了吧
ccppgo
2021-09-27 14:03:36 +08:00
@zjsxwc interface 限定了返回类型, 方法名, 参数列表, map 有限定什么东西吗, 你应该用 object 举例
py2ex
2021-09-27 14:26:13 +08:00
#37 说得很客观了,就是都能做,贴主想把工作量甩给后端
tedzhou1221
2021-09-27 14:30:14 +08:00
自从来了一家公司,发现项目都是用 map 之后,我天天都在无猜迷,猜这个接口入参是什么、出参是什么。
zjsxwc
2021-09-27 14:42:45 +08:00
@ccppgo

用 interface 举例和 object 一样的,

比如 1 个 interface 有 50 个 implement,这 50 个 implement 之间可能是 proxy 、adapter 、decorator 等的套娃实现,你不能在维护时立马知道具体用了哪个。
clf
2021-09-27 14:55:34 +08:00
前后端应该严格按照接口定义来做。我宁愿在请求传入的类里加参数也不愿意用 Map 。
hingbong
2021-09-27 16:09:03 +08:00
@zjsxwc 用接口,如果是 Jackson 序列化 /反序列化可以配置 JsonSubTypes,能够固定一个字段区别是哪个实现,如果混在代码逻辑里面判断就不好找吧,能够固定在一个字段总是能够直观一些
pkoukk
2021-09-27 16:15:44 +08:00
@zjsxwc
用 nodejs 写几个后端项目就知道了,在一个无类型的环境下,变量传个三四层你就不知道它里面是个什么玩意了,只能开调试步进,一步步看,维护难度极高。
pkoukk
2021-09-27 16:27:22 +08:00
看到你的需求仿佛看到了之前公司惨烈的项目
一开始,某些字段只需要透传即可,不需要后端处理,ok,上了 map
然后,前端拿这些参数加入了页面跳转逻辑中,完美
做着做着,新场景下,某些透传字段的可能为空,前端一下就崩了
好嘛,还不是得后端帮擦屁股,开始处理 map 里的这些破数据
一开了这个口,没完没了,干脆整个接口全是 map 了
zjsxwc
2021-09-27 16:27:28 +08:00
@pkoukk 我们说的不是同一个问题,
况且你的问题可以用 jsdoc 解决 https://jsdoc.app/tags-property.html#examples
pkoukk
2021-09-27 16:29:53 +08:00
痛定思痛,结论就是,加参数虽然可能很简单,但你不能认为他简单,不能完全不考虑架构,什么需求全靠加参数解决。
加到最后,代码里一万个参数,没人知道哪些有用哪些没有,数据库里一堆垃圾数据,没人敢动。
pkoukk
2021-09-27 16:39:51 +08:00
@zjsxwc
emm..看了下你的回答,好像你的 map 和楼主说的 map 也不是一回事。
因为楼主说的是 “在不发版的情况下完成需求”,实际想表达的是只把后端当存储,后端不会对任何字段进行检查或处理。这显然是不合理的,因为后端必须要对需要保存的字段进行检查和校验来避免恶意行为。
Bisyfish
2021-09-27 17:09:11 +08:00
存储过程加 map 就完事了 。。。存储过程加字段直接返回。
ptaooo
2021-09-27 17:18:06 +08:00
你们根本不知道用 String 接收参数,再转成 JSONObject 的项目有多恐怖
mawerss1
2021-09-27 17:24:36 +08:00
淘宝订单表加个字段应该挺难的吧
IronProp
2021-09-27 19:09:06 +08:00
你以为是技术问题. 却不知这是人情世故 [狗头]
`难道 java 就没用一种通用的 map 结构表示 字典吗? 加个东西总是有很大抵触?`
seliote
2021-09-27 19:55:34 +08:00
维护过这样的代码,不通读代码根本不知道他写的什么

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

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

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

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

© 2021 V2EX