V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
szpinc1102
V2EX  ›  程序员

网上看到的段子照进了现实,这种代码出现在我的项目中!

  •  
  •   szpinc1102 · 2024-09-04 11:46:59 +08:00 · 28948 次点击
    这是一个创建于 381 天前的主题,其中的信息可能已经有所发展或是发生改变。

    给大家观摩一下,给我看傻了

    image.png

    227 条回复    2024-09-06 14:59:53 +08:00
    1  2  3  
    levelworm
        1
    levelworm  
       2024-09-04 11:55:38 +08:00
    这大概就是不停的粘贴复制造成的吧,懒得重构了?
    TsubasaHanekaw
        2
    TsubasaHanekaw  
       2024-09-04 11:56:13 +08:00   ❤️ 20
    导入导出 excel 表格真是最屎的活
    szpinc1102
        3
    szpinc1102  
    OP
       2024-09-04 11:58:25 +08:00
    @levelworm 这是新写的代码,新代码都能写成这样
    robinchina
        4
    robinchina  
       2024-09-04 11:58:40 +08:00   ❤️ 1
    能用就行
    szpinc1102
        5
    szpinc1102  
    OP
       2024-09-04 11:58:50 +08:00
    @TsubasaHanekaw 但是也不能写成这样吧
    zizon
        6
    zizon  
       2024-09-04 11:59:58 +08:00   ❤️ 14
    你看中间凸出的 应用服务器 等几个你就知道这种写法的某种形式的干净存粹了.
    jiabing520a
        7
    jiabing520a  
       2024-09-04 12:00:08 +08:00   ❤️ 2
    就说是不是一目了然吧,(●'◡'●)
    jorneyr
        8
    jorneyr  
       2024-09-04 12:00:46 +08:00   ❤️ 1
    你就说这是不是执行效率最高的实现吧!!!
    moudy
        9
    moudy  
       2024-09-04 12:01:05 +08:00 via iPhone
    @szpinc1102 有可能是脚本生成的
    moudy
        10
    moudy  
       2024-09-04 12:01:27 +08:00 via iPhone
    @jorneyr 这堆 equal 走下来显然不是啊
    fruitmonster
        11
    fruitmonster  
       2024-09-04 12:05:18 +08:00
    所以最合理的方式是使用 map? 还是怎么
    tool2dx
        12
    tool2dx  
       2024-09-04 12:14:04 +08:00   ❤️ 1
    90%的业务代码又没性能需求,我都是随便写的,怎么好维护,就怎么来。
    lervard358
        13
    lervard358  
       2024-09-04 12:14:34 +08:00
    好奇 正确的写法是啥 弄个 table ,提前把映射关系弄好吗
    puzzle9
        14
    puzzle9  
       2024-09-04 12:30:53 +08:00
    能用 直观
    虽然看起来不优雅
    不过 你给对方发工资吗
    不发的话 那管啥子
    greensea
        15
    greensea  
       2024-09-04 12:34:37 +08:00
    说不定是 copilot 写的呢,反正 tab 一下就都出来了,毫不费力
    bug123
        16
    bug123  
       2024-09-04 12:39:55 +08:00   ❤️ 4
    好奇有更好的写法吗
    AlexRoot
        17
    AlexRoot  
       2024-09-04 12:45:15 +08:00
    想知道这个长截图是如何实现的?
    laoyur
        18
    laoyur  
       2024-09-04 12:45:36 +08:00
    CA IP 表示看不到图
    smdbh
        19
    smdbh  
       2024-09-04 12:48:29 +08:00
    其实也没啥不好
    laoyur
        20
    laoyur  
       2024-09-04 12:50:53 +08:00
    额,发完上面的回复突然又能看到了 😅
    如果确实需要通过字符串比较,那这样写好像也没毛病啊,至少很清晰
    可能大部分执行的都是同样的一句代码,显得比较啰嗦,可以把条件合并起来
    ConquerZ
        21
    ConquerZ  
       2024-09-04 12:58:13 +08:00
    你们都能看到图吗
    bgm004
        22
    bgm004  
       2024-09-04 12:58:22 +08:00 via Android   ❤️ 1
    还行,我手上一个项目一个 vue 页面 6000 多行,一个 echart 图表依赖 2 个 json ,文件合计 20 几 k😢
    woodwhales
        23
    woodwhales  
       2024-09-04 13:01:11 +08:00
    这段代码,从语法结构上看是 Java 。可以推测这段代码在导出 excel 文件并设置满足条件的指定列进行隐藏。如果是我重构,我能想到的是去除多重 if else ,用 map 集合先保存每个条件,然后一个循环遍历 map 中是否存在满足条件。伪代码如下:

    ```java

    // 业务逻辑外部定义
    static Map<String, Function<ExportColumn>> map = new HashMap<>();

    static {
    map.put("服务器名称", data -> !data.getAppServer().isServerName());
    }


    // 业务逻辑内

    if(map.containsKey(cell.getStringValue())) {
    boolean flag = map.get(cell.getStringValue()).apply(dto.getExportColumn());
    sheet.setColumnHidden(index, flag);
    }

    ```
    ooxx2123
        24
    ooxx2123  
       2024-09-04 13:18:22 +08:00
    要我重构的话,也是 23L 的思路,好奇大家有什么其他方式吗?
    或者保留原样,我感觉也还好,就是看起来不太简洁。
    potatowish
        25
    potatowish  
       2024-09-04 13:23:01 +08:00 via iPhone
    excel 导入导出是初级 java 必备技能,怎么把很容易写成💩的代码写的优雅这就是中级 java 的技能了
    ma836323493
        26
    ma836323493  
       2024-09-04 13:43:03 +08:00
    用反射, 另外 model 上一般也有注解 ApiModelProtery
    yb2313
        27
    yb2313  
       2024-09-04 13:47:48 +08:00
    丑陋的 equal
    ice
        28
    ice  
       2024-09-04 13:51:58 +08:00
    挺好,我想不到重构的方法,而且也没想到最后生成的 Excel 是个多复杂的玩意
    loocao
        29
    loocao  
       2024-09-04 13:52:39 +08:00
    清晰明了,简单又方便维护
    adminii
        30
    adminii  
       2024-09-04 13:55:58 +08:00 via iPhone
    项目组代码量考核,第一了
    awalkingman
        31
    awalkingman  
       2024-09-04 13:56:19 +08:00
    @yul36074 第一次加载需要挺长时间
    chenyu8674
        32
    chenyu8674  
       2024-09-04 13:57:28 +08:00   ❤️ 2
    虽然不优雅,但好处是随便换个开发都能懂

    离真正的屎山差远了
    jackOff
        33
    jackOff  
       2024-09-04 13:59:05 +08:00
    整个枚举类,初始化时把枚举类灌入一个 map 里面
    0xcode
        34
    0xcode  
       2024-09-04 14:00:08 +08:00
    这代码写的很优雅啊,谁上手看一眼都能维护的来。
    justfindu
        35
    justfindu  
       2024-09-04 14:01:13 +08:00   ❤️ 36
    先不要吐槽, 先改一版你觉得好的. 一起放出来
    luohaiyang
        36
    luohaiyang  
       2024-09-04 14:03:36 +08:00
    又不是不能用,狗头
    angenin
        37
    angenin  
       2024-09-04 14:03:37 +08:00
    @adminii 这个方法写完,当天代码行数的任务量直接完成🤣
    junwind
        38
    junwind  
       2024-09-04 14:03:39 +08:00
    这种千万千万不要想着重构,能跑就行。
    enihcam
        39
    enihcam  
       2024-09-04 14:03:44 +08:00
    这不是代码问题,这是管理问题。
    enihcam
        40
    enihcam  
       2024-09-04 14:04:38 +08:00   ❤️ 1
    如果老板是“能用就行”的心态,这个团队长不了。
    meeop
        41
    meeop  
       2024-09-04 14:06:19 +08:00
    我觉得写得挺好的,逻辑简洁清晰易于维护


    如果觉得这都不好,你手动封装成其他逻辑,出了 bug 你背锅就行
    如果不敢这么做,这也是上一个人不这么做的原因
    toan
        42
    toan  
       2024-09-04 14:11:58 +08:00
    挺好,要逻辑有逻辑,要代码量有代码量,还能正常运行 👍
    5sheep
        43
    5sheep  
       2024-09-04 14:13:33 +08:00   ❤️ 2
    我对这段代码的评价是:满意
    byc4i
        44
    byc4i  
       2024-09-04 14:14:45 +08:00
    看到等保测评,不知道是不是某地网安部门的外包。你这个属于泄露源码了。
    yhxx
        45
    yhxx  
       2024-09-04 14:14:58 +08:00
    曾经我也觉得看不下去
    现在我也这么写
    清晰易懂,更重要的是代码量拉满了
    lisxour
        46
    lisxour  
       2024-09-04 14:15:32 +08:00
    最起码一目了然,你就该偷笑了
    barrysj
        47
    barrysj  
       2024-09-04 14:17:42 +08:00
    全量 map 还是省不了的吧,顶多把 set true 那行抽出来
    wangritian
        48
    wangritian  
       2024-09-04 14:20:03 +08:00
    不考虑反射吗,真的一行行硬写
    QXDM
        49
    QXDM  
       2024-09-04 14:27:32 +08:00
    fresco
        50
    fresco  
       2024-09-04 14:28:17 +08:00
    好奇有更好的写法吗
    hekunhotmail
        51
    hekunhotmail  
       2024-09-04 14:29:04 +08:00
    gpt 一键重构
    RobertWu
        52
    RobertWu  
       2024-09-04 14:30:50 +08:00 via Android
    真诚发问,反射要怎么写?
    janda
        53
    janda  
       2024-09-04 14:31:09 +08:00
    代码和人有一个能跑就行
    opengps
        54
    opengps  
       2024-09-04 14:31:59 +08:00
    我问下更好的写法是啥?我有过类似的经历,因为具体字段完全是现场要求的,没法提前知道,所以做成了一个批量赋值的模式,别看内容多,其实只是几下纵向复制粘贴就能出来这么多代码
    NEPv5NA6R8R3Y11u
        55
    NEPv5NA6R8R3Y11u  
       2024-09-04 14:32:22 +08:00
    daybreakfangyang
        56
    daybreakfangyang  
       2024-09-04 14:32:29 +08:00
    看着头大🤦‍♂️,空指针警告
    wyx119911
        57
    wyx119911  
       2024-09-04 14:44:44 +08:00
    其实还不错的,很清晰。如果是我的话会改成用 switch case 优化下分支判断的性能,但大体结构保持。
    ShaoLongFei
        58
    ShaoLongFei  
       2024-09-04 14:45:34 +08:00   ❤️ 3
    @QXDM 我觉得这种代码明显更糟糕
    teenight
        59
    teenight  
       2024-09-04 15:00:48 +08:00
    你行你上
    panlatent
        60
    panlatent  
       2024-09-04 15:01:46 +08:00   ❤️ 2
    改 if-else 到 switch :

    title = cell.getStringCellValue()
    switch (title) {
    case "xxxx":
    break;
    }

    这样可以确保每列处理方法集中在一个 case 。

    对于最多的检查+隐藏操作,可以封装为一个函数来改进 if 结构:
    hiddenColumnIfNot(dto.getExpartColumn().getAppProject().isProjectYea())

    dto.getExpartColumn() 输入起来费劲可改成一个中间变量
    plasticman64
        61
    plasticman64  
       2024-09-04 15:06:25 +08:00
    说不定他的工资很低呢,收多少钱干什么活呗
    ZGame
        62
    ZGame  
       2024-09-04 15:31:09 +08:00
    @Track13 解耦阿 1. widget/chart/echart-wrapper 2. data/json
    gollwang
        63
    gollwang  
       2024-09-04 15:33:24 +08:00
    没人注意到这些关键词吗?
    密码评测、等保、国产化
    Mandelo
        64
    Mandelo  
       2024-09-04 15:38:37 +08:00
    我们用的是自定义注解+导出工具类,类似 easy-excel
    CodeCodeStudy
        65
    CodeCodeStudy  
       2024-09-04 15:39:44 +08:00
    代码很直观啊,换个人都懂
    yb2313
        66
    yb2313  
       2024-09-04 15:40:55 +08:00
    @QXDM py 里面字符串不转成枚举吗, 不然未来改字符串改得你头痛, 还不报错
    lucasdev
        67
    lucasdev  
       2024-09-04 15:43:29 +08:00
    很常见的场景,个人觉得比较“优雅”的做法是,在实体类字段上面加注解,然后通过反射来做
    x86
        68
    x86  
       2024-09-04 15:44:08 +08:00
    别的不说,接盘的人应该庆幸了,你见过 IDE 右边红的跟牛市一样的代码吗
    NoOneNoBody
        69
    NoOneNoBody  
       2024-09-04 15:44:18 +08:00
    10 个以内判断我还可以写,10 个以上我就想用状态机了
    qiaobeier
        70
    qiaobeier  
       2024-09-04 15:45:44 +08:00
    不是挺工整的吗,有什么问题?
    nb85144
        71
    nb85144  
       2024-09-04 15:47:54 +08:00
    能用就行了,反正最后都得变成屎山
    shiguiyou
        72
    shiguiyou  
       2024-09-04 15:51:25 +08:00
    读起来很易懂
    Smilencer
        73
    Smilencer  
       2024-09-04 15:57:52 +08:00 via iPhone   ❤️ 17
    挺好的,应该是高手写的。
    随时应对产品经理提出的改动需求,你看有些字段确实需要特殊处理,简单迅速明了。
    你吭哧吭哧搞个封装啥的,改的时候有的你苦恼的!
    justdoit123
        74
    justdoit123  
       2024-09-04 16:08:08 +08:00
    需求太多变的场景下,73# 的说法挺适用的。
    Greendays
        75
    Greendays  
       2024-09-04 16:10:35 +08:00
    看代码都能想象出来 Excel 有多复杂了。这种写法可能真不算差的。
    zhangdawei
        76
    zhangdawei  
       2024-09-04 16:13:30 +08:00
    这样好理解
    asdfasasdf
        77
    asdfasasdf  
       2024-09-04 16:17:13 +08:00
    我觉得挺好的一目了然,后期功能应该也挺容易修改,要是把这个再封装在一个模块那就更完美了
    pkoukk
        78
    pkoukk  
       2024-09-04 16:17:24 +08:00
    每一行的检查都有略有区别,我觉得没多大问题
    QXDM
        79
    QXDM  
       2024-09-04 16:22:30 +08:00
    @yb2313 #66 没有 enumerate 这都是小事,更恐怖的是所有 write_rows 既没抽象也没做任何映射,光逻辑就快到 7 层,拉了 800 多行
    xcsoft
        80
    xcsoft  
       2024-09-04 16:25:51 +08:00
    < 能跑就行了 > 真的
    itechify
        81
    itechify  
    PRO
       2024-09-04 16:30:24 +08:00
    又不是不能用.jpg
    pecsj
        82
    pecsj  
       2024-09-04 16:36:14 +08:00
    分支不多就还好,优雅不优雅另说
    retrocode
        83
    retrocode  
       2024-09-04 16:37:38 +08:00
    看起来是 excel 和 dto 之间缺失了对应关系, 一边可能是甲方提供的 excel 和 项目已有的对象, 这个明显是复制粘贴出来的, 我一眼看到 应用名称 的 case 出现了两次, 感觉用 map 的确会好很多, 这里绝大多数操作都是一样的
    alexsz
        84
    alexsz  
       2024-09-04 16:39:50 +08:00
    整洁壮观,非常好懂,没毛病,真的
    shylockhg
        85
    shylockhg  
       2024-09-04 16:41:07 +08:00
    @moudy 一般来说编译器应该把这种优化成查表
    bgm004
        86
    bgm004  
       2024-09-04 16:43:02 +08:00
    @ZGame 解不动,2 个 json 快 30kb 了,一个文件 6000 多行没有几行注释。echart 的配置就靠这 2 个 json 各种循环遍历,还有一堆本地数据映射。json 里全是各种金融行业术语缩写。
    woniuppp
        87
    woniuppp  
       2024-09-04 16:43:57 +08:00
    按行数定 kpi
    nightlight9
        88
    nightlight9  
       2024-09-04 16:58:16 +08:00
    @opengps 如果是我,我选择用 excel 模板写,更直观一点
    Felldeadbird
        89
    Felldeadbird  
       2024-09-04 17:11:16 +08:00
    能跑就行了。
    这业务代码基本是这样的:

    老板:小明,我想要个 ABCDEFG 的导出。你去实现一下。
    小明:好的老板。 老板我已经完成了。(老板应该不常用,直接硬编码导出)
    若干天后。
    老板:小明,GHJIT 列加一下。
    小明:加完了老板(擦,半年后回来,告诉我调整这个导出,弱智老板)

    如此反复。
    xuanbg
        90
    xuanbg  
       2024-09-04 17:16:24 +08:00
    我导入导出都是搞个实体类,字段加注解就完了,像这种需求也一样用注解搞定。反正注解这玩意可以很多,一个搞不定就再来几个。哈哈哈
    z67nnciQnb7r8bLf
        91
    z67nnciQnb7r8bLf  
       2024-09-04 17:19:58 +08:00
    如果只是某个特定业务,这么写也无可厚非,如果考虑复用的话,建议优化一下
    xloger
        92
    xloger  
       2024-09-04 17:22:46 +08:00   ❤️ 7
    就这还一堆人说好?这一排下来谁知道哪里有没有哪里有特殊逻辑,哪里直观了?
    很明显,改法就是把这里的类型名和判断函数抽出来,弄个 Map 或者类似的合适的数据结构。然后特殊逻辑也拎一块,这才叫直观才叫一目了然好么?
    一大堆 if else 里藏几个特殊逻辑,也好意思管这叫好代码?
    git00ll
        93
    git00ll  
       2024-09-04 17:29:17 +08:00
    我觉得没啥问题,导出功能而已比较边缘的能力不需要过度设计。 而且他还写了注释,看起来一目了然,如果要改这里任何人都能马上上手
    onichandame
        94
    onichandame  
       2024-09-04 17:31:36 +08:00
    挺直观的
    liquid207
        95
    liquid207  
       2024-09-04 17:33:54 +08:00
    添加一个 cell name 和 dto column 的映射,可以解决大部分的重复代码。添加一个匿名函数处理 “应用服务器” 之类有特殊逻辑的 cell 就可以了。
    lasuar
        96
    lasuar  
       2024-09-04 17:36:38 +08:00
    大道至简,楼主还得再看看,不要只从技术角度看现象。
    28Sv0ngQfIE7Yloe
        97
    28Sv0ngQfIE7Yloe  
       2024-09-04 17:49:38 +08:00
    wusheng0
        98
    wusheng0  
       2024-09-04 17:50:20 +08:00
    说优雅的,说得我都怀疑自己了。

    哪怕你按照类型分开来组织呢

    kristofer
        99
    kristofer  
       2024-09-04 17:52:35 +08:00
    @xloger #92 这论坛里大神有,水货更多,放松心态。有的人本来就不是真心干这一行的,指望他们能有什么代码情怀。
    wusheng0
        100
    wusheng0  
       2024-09-04 17:56:29 +08:00   ❤️ 8
    @wusheng0 一说 35 就是失业,一说代码就是能跑就行。我是不想遇到这种同事。写得菜真的无所谓,对代码一点追求没有才是最痛苦的。除非你拉的屎永远不会让别人擦屁股
    1  2  3  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:13 · PVG 07:13 · LAX 16:13 · JFK 19:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.