公司后端的历史代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shitcode
V2EX    程序员

公司后端的历史代码

  •  
  •   shitcode 1 月 30 日 4165 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每个 company 可对应多个 shop 。 因为每个 company 可存在一个特殊店铺,早期历史代码设计的 shop_id=99 (应该是觉得不会有人会开通超过 99 家店吧),并且不记录在表中。 现在有一个客户的店铺超过了 99 家,导致代码中大量判断 shop_id=99 的逻辑执行异常。

    不止后端代码,而且客户端代码中也存在这样的逻辑判断。

    29 条回复    2026-02-01 02:27:53 +08:00
    javalaw2010
        1
    javalaw2010  
       1 月 30 日
    先把店铺拆分到两个 company 中去,再想办法解决历史遗留问题
    zhengfan2016
        2
    zhengfan2016  
       1 月 30 日   8
    创建商店的 func 里 if (shop === 99)shop += 1 ,绕开 id 为 99 的创建,然后加上注释解释为什么这么干
    bootvue
        3
    bootvue  
       1 月 30 日
    shop_id 如何生成的 baseline 从 100 开启
    liyanggyang
        4
    liyanggyang  
       1 月 30 日
    @zhengfan2016 我觉得这是最好的办法
    shitcode
        5
    shitcode  
    OP
       1 月 30 日
    @javalaw2010 变成两个 company 也会影响到业务,现在最低成本的方式确实是二楼的做法
    shitcode
        6
    shitcode  
    OP
       1 月 30 日
    @zhengfan2016 现在确实考虑这么干
    zhhbstudio
        7
    zhhbstudio  
       1 月 30 日   1
    @zhengfan2016 这就是天才吗?哈哈哈 还是说以前遇到过
    xiaowoli
        8
    xiaowoli  
       1 月 30 日
    (应该是觉得不会有人会开通超过 99 家店吧)

    你们公司怪励志的啊
    shitcode
        9
    shitcode  
    OP
       1 月 30 日
    @xiaowoli 哈哈
    Gilfoyle26
        10
    Gilfoyle26  
       1 月 30 日
    为啥一定要从代码的方向来解决呢?超过 99 给他开 2 个账号不就可以了
    ghm2mail
        11
    ghm2mail  
       1 月 30 日
    shop = -1 ,-2,-3.....
    justseemore
        12
    justseemore  
       1 月 30 日
    改一下 mysql 的 AUTO_INCREMENT 就完事了.
    justseemore
        13
    justseemore  
       1 月 30 日
    @justseemore #12 就怕不光= 还有>=
    javalaw2010
        14
    javalaw2010  
       1 月 30 日
    @shitcode #5 考虑到如果有代码逻辑是 if(shop_id >= 99) 就危险了。
    montaro2017
        15
    montaro2017  
       1 月 30 日
    把 99 改成更大的数字 比如 2147483647
    dcdlove
        16
    dcdlove  
       1 月 30 日
    shop 表的 种子升级到四位数 1000 ,然后历史所有 shop_id 加两个 00
    shitcode
        17
    shitcode  
    OP
       1 月 30 日
    @javalaw2010 这个确实是没有,都是判断 99 的,但是也说不好真存在在哪个角落
    meteora0tkvo
        18
    meteora0tkvo  
       1 月 30 日
    本来应该加多一个字段去标识判断是否是特殊店铺,而后端偷懒搞一个特殊 id 去判断
    leecqan
        19
    leecqan  
       1 月 30 日
    其实我没看懂,为啥会有异常,有大佬解释一下么
    noahjsn
        20
    noahjsn  
       1 月 30 日
    @meteora0tkvo 《论屎山代码的形成》《论后期偿还技术债的痛苦》
    konakona
        21
    konakona  
       1 月 30 日
    @javalaw2010
    @zhengfan2016
    如果没有封装,那就惨了 233
    unused
        22
    unused  
       1 月 30 日
    特殊店铺 ID 为什么不用 0 或者 1 呢
    YTNET
        23
    YTNET  
    PRO
       1 月 30 日
    所有的 99 改成 999 呢
    把这个问题留个下一个人
    ragnaroks
        24
    ragnaroks  
       1 月 30 日   1
    我靠,我也曾经遇到过这种问题,也是类商城系统,也是 99 是特殊值。是不是有哪个培训班的老师喜欢用 99 当特殊值啊,明明 Int32.MaxValue 或者 -1 之类的更合理
    irockytan
        25
    irockytan  
       1 月 31 日 via iPhone
    @xiaowoli 我 15 年干那家公司,也是电商,接手的代码里面订单号的逻辑是按月加上一个 6 位数字,也是递增,后面业务量起来,一个月超过 100 万订单,于是大量订单号重复
    gongym
        26
    gongym  
       1 月 31 日 via Android
    @leecqan 店铺 id 是自增的,特殊店铺 id 是 99 ,特殊店铺有特殊逻辑,但是有一个公司创建了超过 99 家店,导致 id 为 99 的是正常店占了特殊店铺的 id ,特殊逻辑就有问题了(执行特殊逻辑的判断就是 id=99 )
    leecqan
        27
    leecqan  
       1 月 31 日
    @gongym 明白了,感谢大佬解答,看来在下理解能力有待提高了
    skallz
        28
    skallz  
       1 月 31 日
    这种特殊逻辑蛮多的,包括 2099 年或者 3000 年被视为永久一样,只是一般我们写这种逻辑不敢把数字写的特别小,哈哈
    syboy
        29
    syboy  
       2 月 1 日 via Android
    @zhengfan2016 很显然他这个已经把 9 当成普通店铺了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2784 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 05:35 PVG 13:35 LAX 22:35 JFK 01:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86