• 请不要在回答技术问题时复制粘贴 AI 生成的内容
MoeMagicMango
V2EX  ›  程序员

小 心 任 何 二 次 接 手 的 代 码

  •  1
     
  •   MoeMagicMango ·
    moyoez · Oct 13, 2024 · 18218 views
    This topic created in 758 days ago, the information mentioned may be changed or developed.

    上周接手了个项目,老板说大部分项目都不能工作,本来是以维护的价格来处理接手这一段代码的

    没想到坑比我想的还多,这是其中展示通用的一部分,大部分出于保密性就不能透露了

    开篇惊喜

    image.png

    我滴妈欸,你说这是 Python 新手练手的代码我都信了,这是家公司的代码???

    Interface 乱飞

    image.png

    怪不得会跑路

    能跑就行的逻辑

    Cookie 生成逻辑

    image.png

    给 User 生成 Cookie 用的,不是 用 个 JWT 会要了命吗?这么写干嘛啊

    image.png

    而且最草的一点,Cookie 存在 MYSQL 数据库 里面

    大哥,这人一多不得打穿数据库啊(

    image.png

    每个请求都要往数据库请求一次,妈欸

    硬编码 +++++

    存心不给维护啊,写硬编码写了十几处

    image.png

    image.png

    image.png

    image.png

    最后

    已经在重新写这一套玩意了,真的太哈人了

    Supplement 1  ·  Oct 14, 2024
    害怕,第一次发的贴子火起来了

    大致看了下各位的回复,确实,代码评价之处确实带入了我自己修改的个人恩怨了,而且存在自身经验不足,并且认为“应当这样做才是合理的”,算是我自己经验不足的问题

    发这贴子也是一时整的无语了 (实际上是接了三套 两客户界面 + 一 后端)
    太多的硬编码改起来血压挺高的,莫名其妙查出来这一块硬编码,有一说一也挺头疼的,大晚上 DEBUG 为此血压高了几次

    不过也说得对,能用就行,哎
    114 replies  •  2024-12-09 16:02:52 +08:00
    1  2  
    ❮ ❯
    jkjoke
    jkjoke
    Oct 13, 2024
    1
    加钱,必须加钱
    Elaina
    Elaina
    Oct 13, 2024
    2
    这就是传说中的防御性编程么🤣🤣🤣
    106npo
    106npo
    Oct 13, 2024 via Android
    3
    接手价至少得是重写的 2 ~ 3 倍起跳😂
    coolfan
    coolfan
    Oct 13, 2024❤️2
    4
    main1 main2 main3🤣
    JoeDH
    JoeDH
    Oct 13, 2024
    5
    什么项目
    MoeMagicMango
    MoeMagicMango
    OP
    Oct 13, 2024
    6
    @JoeDH 一个软件的解析项目,爬虫系
    vasto
    vasto
    Oct 13, 2024
    7
    倒很正常,就是新手写的
    MoeMagicMango
    MoeMagicMango
    OP
    Oct 13, 2024
    8
    @vasto 但这已经是商业项目,要赚钱的(
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Oct 14, 2024 via iPhone
    9
    一般吧
    geligaoli
    geligaoli
    Oct 14, 2024
    10
    你是没见过真烂的 python 代码,这些例子都算是上上等的模范代码了。那些代码可怕的程度超乎想象。每个接口的处理都是复制粘贴的一路到底,没有函数的概念。所有的变量基本都是全局的,包括类里面的也是到处直接读写。业务里用的所有内容都放一张表里,字段多的全用拼音首字母加数字,表的索引几十个。到处共享数据还丝毫没有锁的概念。
    zhenjiachen
    zhenjiachen
    Oct 14, 2024 via iPhone
    11
    session 存 db 是正常操作,每次访问更新 session 的过期时间也是正常操作。你可以看看 spring session 的分布式 session 。不会 Python ,但是这种代码在 Java 里面应该还算正常。
    Maboroshii
    Maboroshii
    Oct 14, 2024 via Android❤️1
    12
    挺简洁的,至少一眼就能看明白。不差了
    Reficul
    Reficul
    Oct 14, 2024❤️1
    13
    我以为啥呢,基操。

    年纪大了之后,现在再看这种程度的代码已经毫无波澜了。
    simple2025
    simple2025
    Oct 14, 2024
    14
    唯一的问题也就就是 check_expire_time 好像是扫表吧,
    maocat
    maocat
    Oct 14, 2024 via iPhone
    15
    fastapi+sqlmodel 挺前卫的啊
    imkuang
    imkuang
    Oct 14, 2024❤️9
    16
    “#写一个接口,当这个接口接收到请求后 ...”
    很明显的面向 AI 编程,写个注释让 AI 帮忙写逻辑🤣
    aycclm
    aycclm
    Oct 14, 2024
    17
    正常,商业代码这种情况多的很,能 RUN 就行(程序员或者代码)
    ntedshen
    ntedshen
    Oct 14, 2024
    18
    萌新确实不建议摸二手代码,会崩世界观的。。。

    这可读性。。。看着挺好的,只有那个遍历 user 的方法即使看着注释也很迷惑。。。
    业务写多了手上没屎才是奇怪事,老板要能把维护项目谈成重写项目那属实是老板的能力可嘉,不过不一定会给你第二次机会。。。
    看 op 效率(加班情况)怎么样了。。。
    IvanLi127
    IvanLi127
    Oct 14, 2024❤️13
    19
    这代码还成吧,这才哪到哪。除了代码结构问题,其他关于实现的吐槽都需要有实际瓶颈才有得说,现在这样未必不行,反到 op 有点偏执了。
    IzayakI
    IzayakI
    Oct 14, 2024
    20
    你的代码还不够变态
    zerovoid
    zerovoid
    Oct 14, 2024 via Android
    21
    应该没人接帮人改 bug 的活吧,重新做一套都比这省时省力,二开也是保证接手的代码能运行,然后尽量不动原来的代码。
    bgm004
    bgm004
    Oct 14, 2024 via Android❤️2
    22
    这才到哪,我接手的前端项目,那煞笔二次封装 element-ui 连双向绑定都没有。全部参数和随机密码一样。
    到处是 arr1 ,arr2 互相循环修改数组,然后得出 obj1 ,obj2 。但文件组件 5000 行起。😭
    guanhui07
    guanhui07
    Oct 14, 2024 via iPhone
    23
    见过更恶心的
    lcbp
    lcbp
    Oct 14, 2024❤️1
    24
    cookie 和 token 有本质区别,token 也不是只有 jwt 。

    过期时间通过 get 扫表确实是问题,应该后台定时任务。

    见过几十层 if 的吗?缩进都换屏了。
    Bingchunmoli
    Bingchunmoli
    Oct 14, 2024 via Android
    25
    @zhenjiachen 不正常,如果是 jwt 存 redis 如果是 session 序列化文件和 db 有什么关系
    zhtyytg
    zhtyytg
    Oct 14, 2024❤️1
    26
    @Track13 点了,水平不够又喜欢二次封装,用起来头都大了。
    sagaxu
    sagaxu
    Oct 14, 2024
    27
    这代码质量还算不错了,比我接手过的大部分代码强 10 倍。

    Cookie 存 DB 也是正常操作,小公司也不会有性能瓶颈,DB 打不死的。硬编码也看什么东西,API 请求地址之类的不太会更新的东西,写死也不影响可维护性。
    0xD800
    0xD800
    Oct 14, 2024
    29
    等用户多写死了 就有活继续优化了呀
    BeijingBaby
    BeijingBaby
    PRO
    Oct 14, 2024
    30
    [又不是不能用,又不是不能跑]
    967182
    967182
    Oct 14, 2024
    31
    大哥,你这系统有多少用户啊,就打穿数据库了
    dayeye2006199
    dayeye2006199
    Oct 14, 2024
    32
    菜鸡我一概推荐 django ,而不是 flask 和 fastapi 这种 free form 的。
    其实 spring 也差不多 django 这个意思,给你框死死的,水平高低整出来的活都差不多。

    最怕就是 flask / fastapi 这种,新手写简直要了命
    k9982874
    k9982874
    Oct 14, 2024 via Android
    33
    你这比我司运营了 10 几年的项目好多了,就说一点我们这项目技术栈横跨了 php ,java ,nodejs ,golang ,lambda ,每个技术栈都是在正在火的时候老板赶时髦要求加的,你就说牛不牛 b 吧
    sn0wdr1am
    sn0wdr1am
    Oct 14, 2024
    34
    主打一个够用就好。

    俗称屎山代码。
    anakinsky
    anakinsky
    Oct 14, 2024
    35
    存 db 正常啊,又不是人均百万并发,哈哈🤣
    Tsukihime
    Tsukihime
    Oct 14, 2024
    36
    这注释不像是给人看的,像是给 AI 生成用的 prompt
    wupher
    wupher
    Oct 14, 2024
    37
    我还见过更疯的。

    本来一个 DB 查询能搞定的事,硬写成 for 循环,一个个来查。

    关键最后发现查了还没什么用。找产品建议取消显示这个字段,注释掉 for 查询,速度一下就上去了。
    aarontian
    aarontian
    Oct 14, 2024
    38
    其实我也想说 cookie 存数据库是基操,不是热门 toC 项目没那么容易打穿,也不用引入 redis 啥的
    v2orz
    v2orz
    Oct 14, 2024
    39
    又不是不能用
    我就认识一个老板,先花钱从同行公司买一个版本代码(原版本也不咋地),招了一个全职 Java 开发做二开,工资 4000
    你猜 2 年之后这个代码变成什么样了?

    就这样,老板在业务稳定后,为了节约成本,把这 4k 的兄弟也开了,月 2000 块找了个兼职
    vkZudze5p1h4py5H
    vkZudze5p1h4py5H
    Oct 14, 2024
    40
    深深赞同,最近接了个私活,一个小程序商城,后端是拿 dedecms 5.3 - 5.6 ,反正还没到 5.7 的版本 N 次开发的。

    那都不知道多少手了,我在里面看到了"送水"、"考试"、"广告联盟"、"商城"等 N 多的内容。前端传来的参数没有任何过滤,数据库操作类每个人一个封装一个,一个函数里可能调用了多个数据库操作类的方法,比如获取一条记录有的叫 get_one ,有的叫 getOne ,有的叫 first ,有的叫 find 。而这个公司拿着这个服务端的代码,号称完全自主开发,已经干了 14 年了。

    我真不知道怎么坚持下来的,就那参数不过滤,还做商城,没人干他们吗?我实在理解不了。脑袋都要大了,中途有 N 次想要退钱不干了,好在还是坚持下来了,又往屎山上拉了一泡。
    user100saysth
    user100saysth
    Oct 14, 2024
    41
    草台班子,整个世界都是
    seedhk
    seedhk
    Oct 14, 2024
    42
    @kpsanmao 兄弟,请问下,私活哪里接比较合适啊
    Tink
    Tink
    Oct 14, 2024 via Android
    43
    老板在找几个人都搞不了,最后还得找原开发
    zxsky
    zxsky
    Oct 14, 2024 via Android
    44
    挂我是吧,晚上别睡太死
    cccvno1
    cccvno1
    Oct 14, 2024
    45
    可能屎见多了,看这么短的代码甚至有点眉清目秀😂
    cndenis
    cndenis
    Oct 14, 2024
    46
    你能轻松看懂说明这代码已经是及格以上的水平了, 可以了.

    而且你说这是爬虫, 那代码就是针对性的, 没有复用可能, 硬编码完全没问题.

    你不会觉得一个爬微博的虫只要改个域名就能爬抖音吧, 如果不能改的话, 写死微博的域名有啥问题
    llsquaer
    llsquaer
    Oct 14, 2024
    47
    觉得还行啊,楼主看能发个修改过的对比下,学习学习
    wangxiaoer
    wangxiaoer
    Oct 14, 2024 via iPhone
    48
    看起来的确挺烂。但是 session 存数据库这个不算问题,多台服务器不用考虑负载均衡的模式。
    imnpc
    imnpc
    Oct 14, 2024
    49
    代码没问题的 这个估计也是找人做的急活 功能都实现了 而且做的爬虫的话 根本不会有大规模用户

    什么样的需求 给的什么样的报价 写什么样的代码
    woodfizky
    woodfizky
    Oct 14, 2024
    50
    已经不算很差了,不过确实项目结构还不成形。
    起码这个 BaseModel 应该是 pydantic 的 BaseModel 吧,起码知道用显式定义属性的类。

    我知道的个别同事都是字典用到天昏地暗。
    一个字典几十个键值对,还有嵌套的,不管大部分属性能不能用到,反正就从头用到尾,好几层调用方法都要把这个祖传字典传进去,修改里面的值。
    还有所有业务,涉及到数据库的,也不知道怎么配置 ORM 的,反正就一条语句一个事务。

    接手的那个同事,接手了几个月,改 bug+优化+改造,头发都白了几百根。
    zgsi
    zgsi
    Oct 14, 2024
    51
    又不是不能用
    rlds
    rlds
    Oct 14, 2024
    52
    看了这代码,比我们那些项目好多了。。
    ugpu
    ugpu
    Oct 14, 2024
    53
    代码没问题. 挺规范的.
    又不是什么大工程 临时爬虫项目而已 以后要改得地方多着呢 这不 OP 就改了吗?.
    看项目就几个文件几个代码
    我内心已经对这些毫无波澜
    ma46
    ma46
    Oct 14, 2024
    54
    如果你觉得这就是屎山, 那你是没见过真正的屎山
    CodeCodeStudy
    CodeCodeStudy
    Oct 14, 2024
    55
    还好吧,不算太烂
    cutiechi
    cutiechi
    Oct 14, 2024
    56
    代码没啥问题,简洁明了
    harryWebb
    harryWebb
    Oct 14, 2024
    57
    你这个得加钱,你还要重新写,也许这代码运行一段时间公司倒闭了就没了

    也很正常

    你没遇到过当年我遇到 php 得代码,和 html 混写,啥都混一起,那个是真的雷人
    gimp
    gimp
    Oct 14, 2024
    58
    能跑就行
    HywelXu
    HywelXu
    Oct 14, 2024
    59
    刚被一个烂尾项目坑过,说是维护就好,加几个接口而已。
    没想到改着改着就等于重新写了一遍 既不讨客户喜,还不赚钱。
    再也不要干这种活儿了。
    haneki
    haneki
    Oct 14, 2024
    60
    代码和人有一个能跑就行。
    HashV2
    HashV2
    Oct 14, 2024
    61
    @geligaoli 是的 这个已经算好的了,起码能知道是干什么的,我现在接手的无注释、一个方法几百行的代码才是炸裂,我准备梳理完逻辑直接重构了,真改不了一点。
    wowawesome
    wowawesome
    Oct 14, 2024
    62
    属于能跑就行
    cxe2v
    cxe2v
    Oct 14, 2024
    63
    1. 这个代码帮老板挣到钱了吗?
    2. 你写的优雅代码能帮老板挣到更多利润吗?
    XLeopard
    XLeopard
    Oct 14, 2024
    64
    看着这种代码就控制不住的想骂
    BlackSiao
    BlackSiao
    Oct 14, 2024
    65
    @Maboroshii 还真是,我不是科班出身的,大学的时候写的代码和这个比也差不多了
    charlie21
    charlie21
    Oct 14, 2024
    66
    3. 老板挣钱给你买法拉利了吗?
    991547436
    991547436
    Oct 14, 2024
    67
    ai 写的
    Latin
    Latin
    Oct 14, 2024
    68
    能跑就行 另外这个代码算很整洁了
    0x4b0082
    0x4b0082
    Oct 14, 2024
    69
    其实还好 这都算中规中矩的了
    xcai007
    xcai007
    Oct 14, 2024
    70
    也有可能是公司的问题。。。
    NO9527
    NO9527
    Oct 14, 2024
    71
    每天访问量个位数的话,存 db 也就这样了
    lwlizhe
    lwlizhe
    Oct 14, 2024
    72
    竟然还给你写注释,良心啊~~🐶
    Xi
    Xi
    Oct 14, 2024
    73
    这是人情世故代码,考验老板,也恶心下一位接手的人。
    就算你花大精力重构了代码,要是之后项目再次不能工作,老板很大可能会觉得你的水平和之前的差不多,这就是所谓的吃力不讨好。
    Felldeadbird
    Felldeadbird
    Oct 14, 2024
    74
    问题不大,能跑就好了。
    钱给够,多屎我都可以在上面雕花。
    yh7gdiaYW
    yh7gdiaYW
    Oct 14, 2024
    75
    看起来除了 main1 2 3 4 有点难绷外,其他的还不错了,他甚至还写了注释
    querysecret
    querysecret
    Oct 14, 2024
    76
    不是啥大事,up 应该工作 5 年内,哈哈,大于这个数应该见怪不怪了
    cbythe434
    cbythe434
    Oct 14, 2024
    77
    main2 main3 main4....main7 ,main 届 goat
    300
    300
    Oct 14, 2024
    78
    这个好歹有板有眼,知道是干嘛的

    以前重构某日企车厂 app 的三手代码。页面接收一堆参数,最后应该显示两个按钮,结果一通处理显示了 4 个,他们的处理方法就是直接加 size = 2 。反正 mock server 的数据是固定的。几十个页面全部都是这种写法,有什么 if else 还是 when 条件的,最后强行设置结果就行了。

    从代码看一手的时候是有真正逻辑的,二手的时候可能是修 bug 或者改设计,直接就真正的放飞自我了
    utre938722
    utre938722
    Oct 14, 2024
    79
    现在写代码 本着能用就行了
    ColdBird
    ColdBird
    Oct 14, 2024
    80
    看的我都笑死了,真是绷不住了。
    我对垃圾代码是真的零容忍,但是很多人都是抱着又不是不能跑的心态写代码的,没啥办法
    GBdG6clg2Jy17ua5
    GBdG6clg2Jy17ua5
    Oct 14, 2024❤️1
    81
    我觉得写得挺好的呀。
    1.你看他是爬虫的,为啥有那么多 main ,因为每次爬虫变了,就复制粘贴一个新的。这种方法简单快捷,后来者还能清晰看到历次的变化。
    2.简单几个文件就实现了老板的功能,肯定实现得很快,老板看到漏出欣慰的笑容。
    3.经过几手了,还在他的基础上变更,证明确实好用。
    总得来说,结构清晰,还有注释,这代码我得给 90 分。
    www12222
    www12222
    Oct 14, 2024
    82
    防御型编程,小公司就得这么写,写下去位置越来越稳
    ieliwb
    ieliwb
    Oct 14, 2024
    83
    代码写的好能当饭吃吗🙄
    drwebco
    drwebco
    Oct 14, 2024
    84
    没必要喷,

    1.你是使用 jwt 包,人家这叫自己实现 session ,你为何认为使用别人的轮子就比自己实现产生了优越感?自己实现的性能比不上开源轮子也情有可原。

    2.还有 jwt 有弊端,它是无状态的,服务端无法控制它掉线,也许他想使用这种 sission 状态能从服务端控制,也需你会说,为啥不用 redis ,或放在内存? 咋了,内存不是系统开销啊?

    3.你说的每次调用都要查询一次数据库,怎么你每次打开一个页面,不都去查询一次数据库的么,顺带就把 cookie 给查了,至少不额外占用连接数据库和销毁的开销,系统额外开销也不会多大。
    reseen
    reseen
    Oct 14, 2024
    85
    @cndenis 赞同
    lmshl
    lmshl
    Oct 14, 2024
    86
    这代码写的挺不错的啊,没看出来哪里有问题
    cominghome
    cominghome
    Oct 14, 2024
    87
    看着像是有一定基础的程序员跨语言写的
    ThisDay
    ThisDay
    Oct 14, 2024
    88
    这才哪到哪?可读性都挺好的
    Whitroom
    Whitroom
    Oct 14, 2024
    89
    还得是 fastapi + sqlmodel ,用框架提高了烂代码的可读性😂
    qW7bo2FbzbC0
    qW7bo2FbzbC0
    Oct 14, 2024
    90
    二次接手的代码就像被修了两次的电子产品,多次转院的病人一样
    75S3CWXNN0VQ84mg
    75S3CWXNN0VQ84mg
    Oct 14, 2024
    91
    正常,要对此保有平常心。而且能不动就不要动。
    simple2025
    simple2025
    Oct 14, 2024
    92
    只要不是高分发,cookie 都可以存 db 的吧.至少数据库有界面,有什么问题,好查许多
    scys
    scys
    Oct 14, 2024
    93
    整个代码我硬是看不出‘大’问题。看价钱,维护就维护的态度。如果只是让这个代码跑起来,不负责其他,不难。
    gesse
    gesse
    Oct 14, 2024
    94
    能说这种代码是烂代码的,可能入行没多久,或者是常年在大厂流水线打螺丝 😄
    LingTai
    LingTai
    Oct 14, 2024
    95
    这个代码,我感觉还行
    Marszm
    Marszm
    Oct 14, 2024
    96
    这就是 AI ,gpt 。。。牢美最好以后都拿这玩意开发系统。
    masterclock
    masterclock
    Oct 14, 2024
    97
    看起来没啥大问题,似乎只是一个小项目,随便写写凑合一下
    janpun
    janpun
    Oct 14, 2024
    98
    从不接手二手代码,因为耗费的精力是新开发的几倍,客户不会理解的
    vkZudze5p1h4py5H
    vkZudze5p1h4py5H
    Oct 14, 2024
    99
    @seedhk 我是之前的同事介绍的,我跟你说我都怀疑是这个同事嫌烦推给我的。
    Building
    Building
    Oct 14, 2024 via iPhone
    100
    感觉挺清晰明了的,有没有可能你自以为优化了半天下一任一接手也觉得你写的是垃圾呢
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1921 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 238ms · UTC 15:31 · PVG 23:31 · LAX 07:31 · JFK 10:31
    ♥ Do have faith in what you're doing.