V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hahaFck
V2EX  ›  Java

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

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

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

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

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

    map 仅适用于参数不固定,例如上下文传递这种,或者是模板入参必须 map,其他场景都是可以用强类型替代的
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2521 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:44 · PVG 20:44 · LAX 04:44 · JFK 07:44
    ♥ Do have faith in what you're doing.