hahaFck
V2EX  ›  Java

把 Java 写成动态语言了,越改越崩溃。

  •  
  •   hahaFck · Aug 23, 2021 · 5740 views
    This topic created in 1900 days ago, the information mentioned may be changed or developed.
    各种 map,前台数据传到后台转换成 map 或者 list<Map>,数据库查询返回 list<Map>,方法调用传参数也是 Map,现在改个东西,完全不知道会影响到哪里,因为都是 Map 参数,方法签名一般都不变,但是 Map 里面的数据不仔细看根本不读知道都有什么,真是越改越崩溃。
    另外 map 取数也是各种类型转换,各种 null 判断。
    及其 ugly 的代码。
    Supplement 1  ·  Aug 25, 2021
    真是动态一时爽,维护火葬场。不知道其他语言开发比如 go,c++等也有这个问题么。
    39 replies  •  2021-09-26 17:52:25 +08:00
    qaz168000
    qaz168000
    Aug 23, 2021
    1
    不是做 java 的,但是感觉这其实也是一种趋势,数据结构和内容其实也只有输入端和接收端才会关心,最多也就加个 filter 会关注
    ztcaoll222
    ztcaoll222
    Aug 23, 2021
    2
    那么问题来了,一开始为什么要这么做
    Chaitanya
    Chaitanya
    Aug 23, 2021❤️1
    3
    开发一时爽,维护火葬场
    thtznet
    thtznet
    Aug 23, 2021
    4
    动态一时爽...
    egfegdfr
    egfegdfr
    Aug 23, 2021
    5
    我们隔壁组也这么些,有几次和他们一次查问题,查到奔溃。所以 自己这边严格控制 map 的使用(具体看业务情况),看到不合理的 会让大家改了。 这个还是看第一版的开发人员习惯吧
    liaojl
    liaojl
    Aug 23, 2021 via iPhone❤️1
    6
    我们组也是一样,入参各种 map,出参一律 object,有时想知道这个 return 的 object 是什么类型的,跟到代码里面才发现,其实也是一个 map,崩溃...
    golangLover
    golangLover
    Aug 23, 2021 via Android
    7
    一开始就不允许这样写啊。。。
    wa8n
    wa8n
    Aug 23, 2021
    8
    之前帮其他项目组救急接触过类似的代码,mybatis 参数、返回值全是 Map,我滴个乖乖,现在还有阴影
    q447643445
    q447643445
    Aug 24, 2021
    9
    现在代码都生成还有这问题?
    msg7086
    msg7086
    Aug 24, 2021
    10
    我甚至开始怀疑是不是 Java 圈子里就流行这么做。
    手里拿到的组里的代码也是,组件之间全都是 Map<String,String>传参……
    实在不知道为什么不做一个静态类型 POJO 的输入。
    kingfalse
    kingfalse
    Aug 24, 2021 via Android
    11
    现在还是不能在少定义一些 bean 的方面有什么好的解决办法
    bthulu
    bthulu
    Aug 24, 2021
    12
    这是 mybatis 带的好头
    xjlnjut730
    xjlnjut730
    Aug 24, 2021
    13
    不允许用 Map 做出入参就可以了。
    我反正项目里从来不用,多定义点 Bean,我觉得都比 Map 好太多。维护性完全不是一个级别的。
    shellic
    shellic
    Aug 24, 2021
    14
    可能是为了赶工期吧,毕竟老板觉得这个也简单那个也简单,所以小公司小老板用 PHP 这种语言是最合适的
    kbac001
    kbac001
    Aug 24, 2021
    15
    之前问了下说是开发灵活..
    darrenfang
    darrenfang
    Aug 24, 2021
    16
    之前维护的一个 10 多年前的项目就是这样的
    aeiou520
    aeiou520
    Aug 24, 2021
    17
    这个算好..我遇到过,用查库用 jdbc,没有 bean,全 map,接口可以在后台配置,代码存数据库,动态调用.维护怕了
    zhangxh1023
    zhangxh1023
    Aug 24, 2021
    18
    各种 JSONObject 满天飞的表示也差不多这种感觉。。。
    James369
    James369
    Aug 24, 2021
    19
    javascript 不经常这么做么,java 不是 javascript 的缩写么
    seakingii
    seakingii
    Aug 24, 2021
    20
    可以这么做,也可不这么做,那么问题来了,为什么一定要用 MAP 传参?
    cslive
    cslive
    Aug 24, 2021
    21
    居然真的有这么干的!!!!
    NoDocCat
    NoDocCat
    Aug 24, 2021
    22
    @James369 然而, 人家可以上 TS 做 map 的泛型
    unco020511
    unco020511
    Aug 24, 2021
    23
    之前维护过一个类似的项目,一度有了离职的想法
    aneostart173
    aneostart173
    Aug 24, 2021
    24
    你抛弃了编译器,编译器就抛弃了你。
    ccde8259
    ccde8259
    Aug 24, 2021 via iPhone
    25
    前一家一样的问题,二次开发全靠 Debug 看数据。
    更可怕的是那些 void func(Map<?,?> map)方法,纯副作用函数……
    122006
    122006
    Aug 24, 2021
    26
    偷个懒直接拿到就 jsonobject 转为实际量就算了,在后续逻辑过程中解析的直接火葬场
    kaneg
    kaneg
    Aug 24, 2021
    27
    所以,很多人为了所谓的灵活,并且懒得定义 bean class,结果自己一时爽,😭了后来人。
    tedzhou1221
    tedzhou1221
    Aug 25, 2021
    28
    我都怀疑你是我同事。哈哈
    securityCoding
    securityCoding
    Aug 25, 2021
    29
    @bthulu 严格来说是 jdbc 搞出来的玩意
    luzemin
    luzemin
    Aug 25, 2021
    30
    面向对象的语言不面向对象编程,就是原罪
    cco
    cco
    Aug 25, 2021
    31
    看场景吧,因为我们的查询来源五花八门,字段也是非常的多,所以 前台 - > 接口 <- DB 都是使用 Map 传参,返回 List<Map>,恶心吗?的确恶心,但是这应该是目前开发场景的最优解。如果把这些都用对象替代,那么光定义对象就得一大堆,并不比 Map 好用。
    a719031256
    a719031256
    Aug 25, 2021
    32
    老代码?

    以前遇到过这种情况,那个项目据说是一个人写后端,web 端,安卓端,外加时间短才导致代码很烂
    nanmu42
    nanmu42
    Aug 27, 2021
    33
    我一般写 Go,最近有些 Flink 需求学着写一些 Java,感觉是不是因为 Java 里不习惯把 struct(class)当成纯粹的数据载体?以及 Java 里定义 class 比较麻烦?

    Go 里如果数据结构是确定好的话,一般是从 JSON 直接解析到 struct (对应 Java 的 POJO ),字段和类型都是固定的,而且 struct 定义比较方便,一般没有这个烦恼。
    hahaFck
    hahaFck
    OP
    Aug 27, 2021
    34
    @nanmu42 是,java 没有 struct,建一个类相比其他语言感觉成本高。
    liian2019
    liian2019
    Aug 27, 2021
    35
    维护起来不得哭了 方法入参是啥都不知道
    issakchill
    issakchill
    Aug 30, 2021
    36
    曾经在一家银行维护过这样的代码 一个月就跑路了
    hahaFck
    hahaFck
    OP
    Aug 30, 2021
    37
    @issakchill 很难想象,银行都写这样的代码。
    seliote
    seliote
    Sep 5, 2021
    38
    组里也有人这么干,一开始还想管,后面已经懒得管了,不通读代码根本不知道写的是什么玩意
    night98
    night98
    Sep 26, 2021
    39
    强制规范不允许使用 map 作为入参和出参啊

    动态语言是动态语言的玩法,静态语言是静态语言的玩法,非要强行融合那必然死的很惨

    map 仅适用于参数不固定,例如上下文传递这种,或者是模板入参必须 map,其他场景都是可以用强类型替代的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2673 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 117ms · UTC 00:25 · PVG 08:25 · LAX 16:25 · JFK 19:25
    ♥ Do have faith in what you're doing.