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

最近接了个上古 PHP 项目,看到代码的那一刻,我死的心都有了,求解脱

  •  
  •   danhahaha · 2017-05-06 09:34:44 +08:00 · 9736 次点击
    这是一个创建于 2759 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近接了个项目,需求很简单,对方也要求低,薪酬不错,所以就爽快的答应了

    但是看到代码那一刻才明白,我他妈的是掉到坑里了

    怎么说呢,我大一时候学的 php,当然开始时候是用原生 php,没觉得不妥,慢慢的做了 1 年,使用框架,才知道原生真的很难拓展,修改,现在用习惯了 laravel,symfony 这种现代框架,看到原生真的是想哭啊。

    感觉是另外一种语言。

    关键是这套系统全是 sql 原生查询啊,根目录全是 php 文件啊,html 全是表格嵌套啊,js 全是自己写的啊,居然还用了 git 版本控制,但是没什么鸟用,大概只是后来的接盘侠提交了不到 20 个页面,其他的估计就只有这位上古程序员知道什么是什么了,最最关键的是这位技术记性,逻辑极其牛逼,项目涉及到大量的积分,支付结算,慢慢的逻辑

    我爱 php,知道很多人说 php 不好,但是我觉得没什么,因为 php 上手快,出活快,赚钱也快,但是看到这个,我真的不知道该怎么办了,活是肯定要继续的,客户比较好,按时间付费,求各位大神有没有什么办法,或者简单框架可以再原生基础上快速重构,或者改版,或者什么的容易结合使用的?

    71 条回复    2017-05-08 14:59:44 +08:00
    viko16
        1
    viko16  
       2017-05-06 09:37:31 +08:00 via Android   ❤️ 1
    退订跑路!
    gouchaoer
        2
    gouchaoer  
       2017-05-06 09:41:19 +08:00 via Android   ❤️ 1
    你 laravel 都能学会,单页肯定没问题
    littleylv
        3
    littleylv  
       2017-05-06 09:41:38 +08:00   ❤️ 1
    如果这个项目原先的功能不多不复杂,直接整个项目重构好了,你后续新增功能也方便
    如果之前已经非常复杂了,还是不要动,毕竟如果你对之前的功能逻辑不清楚的情况下贸然重构。。。

    取舍吧
    danhahaha
        4
    danhahaha  
    OP
       2017-05-06 09:46:49 +08:00
    @littleylv 客户要改的是前端,之前很丑,要改模板,但是全是 echo + 表格
    gyorou
        5
    gyorou  
       2017-05-06 09:47:16 +08:00   ❤️ 1
    我之前接收过的上古 php 项目,一个 http 的 request 从 socket 的绑定开始写。
    kn007
        6
    kn007  
       2017-05-06 09:51:35 +08:00
    这个只能花时间。没别的办法。很尴尬。
    ChopMoun
        7
    ChopMoun  
       2017-05-06 09:51:40 +08:00
    你也说了改的是前端。只是比较繁琐罢了,时间上的问题,再说客户是按照时间付费,这有什么好解脱的?
    NonClockworkChen
        8
    NonClockworkChen  
       2017-05-06 09:52:42 +08:00
    就是说原作者是一位 php 的上古大拿吗- -
    em70
        9
    em70  
       2017-05-06 09:53:58 +08:00 via Android
    多花时间多收钱,有什么不好
    tabris17
        10
    tabris17  
       2017-05-06 09:54:05 +08:00
    你现在需要产品说明书
    laoyuan
        11
    laoyuan  
       2017-05-06 10:00:51 +08:00
    捂脸,我现在写的还是这样的上古代码,各种 mysql_fetch_assoc,以及 echo 出来的 JS。。
    去年想用 Laravel 重写来着,历史问题太多愣是没写下去
    laoyuan
        12
    laoyuan  
       2017-05-06 10:02:20 +08:00
    尴尬之处在于,代码没有完全重构之前,加功能还得继续上古
    Felldeadbird
        13
    Felldeadbird  
       2017-05-06 10:03:14 +08:00   ❤️ 1
    吐吐槽就好了,该怎样做还是要做。重构就免了,因为你的收入根本不足够你去重构如此项目。
    如果要改善此项目。1:在新功能中引入新架构开发,同时要确保原有的函数、方法可以调用。2.修改旧功能,看开发时间而定,如果很耗时较长,直接在原架构下开发。反之参考第一点。
    对于老旧项目,除非老板肯定重构,否则不要一步到位。这需要新旧架构通存过渡期。
    reus
        14
    reus  
       2017-05-06 10:04:08 +08:00
    无能。
    dsg001
        15
    dsg001  
       2017-05-06 10:12:13 +08:00
    画重点:需求很简单,对方也要求低,客户比较好,按时间付费;

    那就慢慢来呗,客户又没有要求重构
    danhahaha
        16
    danhahaha  
    OP
       2017-05-06 10:14:29 +08:00
    @reus 再加个为力不是更好
    danhahaha
        17
    danhahaha  
    OP
       2017-05-06 10:17:04 +08:00
    @dsg001 恩,话是这么说,不过就成了体力劳动了,真正得码农了
    iRiven
        18
    iRiven  
       2017-05-06 10:18:45 +08:00 via Android
    原生就不好吗
    mathgl
        19
    mathgl  
       2017-05-06 10:21:43 +08:00
    @gyorou 高手哪。
    zjqzxc
        20
    zjqzxc  
       2017-05-06 10:24:37 +08:00
    不要重构,重构坑更多

    慢慢改吧。。没有太好的方法
    jiehuangwei
        21
    jiehuangwei  
       2017-05-06 10:34:13 +08:00
    缝缝补补又一年
    yumijie
        22
    yumijie  
       2017-05-06 10:37:52 +08:00
    @jiehuangwei 赞同
    dsg001
        23
    dsg001  
       2017-05-06 10:38:04 +08:00   ❤️ 1
    @danhahaha 对方代码应该是经过漫长时间考验,比较稳定可靠的,如果重构能保证提高效率而且没坑吗?如果只是因为洁癖就去重构客户代码,这才是坑吧
    Mutoo
        24
    Mutoo  
       2017-05-06 10:41:29 +08:00
    不要重构,要重写。
    QQ2171775959
        25
    QQ2171775959  
       2017-05-06 10:51:18 +08:00
    希望您能静下心来,好好思考一下,也许就会发现并没有那么难的,抗过了这一波后,又是一个英雄好汉。
    wangjie
        26
    wangjie  
       2017-05-06 10:58:02 +08:00
    我接手过最烂的代码还不过是一份基于 tp3 的代码
    sagaxu
        27
    sagaxu  
       2017-05-06 11:01:38 +08:00
    @gouchaoer

    封装得当的代码,一个功能可能调用了 10 个业务方法,理想的情况下只要看一下十几个名字就了解个大概了,最差情况是名字不好,得一层层的人肉过一遍代码。

    封装不好的代码,一个功能几千行代码全放一起,call stack 是比较浅,但是要读更多的细节代码,还很容易陷入复制粘贴的泥淖,到处长得相似却又并不完全一样的代码是很头疼的。

    封装可以把实现细节和意图隔离起来,维护代码的时候,我们更多关注意图之间的串联,而非实现细节。
    danhahaha
        28
    danhahaha  
    OP
       2017-05-06 11:04:37 +08:00
    @wangjie tp3 起码还前后分离了
    ferran
        29
    ferran  
       2017-05-06 11:07:05 +08:00
    从接盘到跑路
    hzw94
        30
    hzw94  
       2017-05-06 11:09:15 +08:00
    无解的代码
    hellpeng
        31
    hellpeng  
       2017-05-06 11:15:46 +08:00
    删除工程, 新建工程
    wolfan
        32
    wolfan  
       2017-05-06 11:23:30 +08:00
    新建项目申请项目资金。
    fuxkcsdn
        33
    fuxkcsdn  
       2017-05-06 11:37:23 +08:00 via iPhone
    都知道是上古项目了,还能要求啥?
    之前公司里还有个项目是 PHP 4 时代写的呢。
    这种上古项目修改起前端感觉反而更方便,基本上一个页面就是一个 php 文件,URL 就已经指名了
    个人最无法接受的是代码格式混乱,看代码时总有格式化代码的冲动(一格式化起来就没完没了了)
    visonme
        34
    visonme  
       2017-05-06 11:40:57 +08:00
    在原生 php 工程基础上用框架不可取,最近的一个项目就是类似情况,后面果断放弃了,只能坚持原生或者框架重写。

    原生 php 工程如果代码结构好点,其实修改起来还是很容易的。
    PythonAnswer
        35
    PythonAnswer  
       2017-05-06 11:44:37 +08:00
    提取表格,生成 api。
    isbase
        36
    isbase  
       2017-05-06 12:24:40 +08:00 via Android
    这次放弃了,以后还会放弃的
    designer
        37
    designer  
       2017-05-06 12:31:20 +08:00
    突然钦佩上了上古大拿
    Meimei
        38
    Meimei  
       2017-05-06 12:49:47 +08:00
    我只有说钦佩,继续努力干
    shijingshijing
        39
    shijingshijing  
       2017-05-06 13:07:38 +08:00
    @sagaxu @danhahaha

    算好的了,起码认真看看还能看懂。楼主,你见过拼音首字母命名的表名和字段名么? ZYXX, KHXX, DDXX 你猜猜是啥意思? 你见过中英文混合命名的变量名么? oneTimeDiscount, noDiscount, zhongShengDiscount

    所以说,楼主你还是加油干吧,你吃的这堆屎还算香的呢。呵呵
    liuxu
        40
    liuxu  
       2017-05-06 13:11:14 +08:00
    我公司老网站也是你说的那个样子,然后我们自己定义 mvsc 层,新需求都用 mvsc 写
    拿请求返回数据由 action 操作,显示页面用 view,view 层用 smarty 做,view 里面的 ajax 接口都是 action,action 和 view 调用逻辑处理 service 层,service 遇到数据库,文件读写调用 model
    还需要自己写一个公共 model 类,封装原生 mysql,然后每个模块的 model 引用这个公共 model,操作会很轻松

    严格按照这个来的话,有很多代码可以直接复制粘贴修改就行,很节约时间
    jarlyyn
        41
    jarlyyn  
       2017-05-06 13:28:03 +08:00   ❤️ 1
    没有说明书的话。

    这种代码比基于任何一个框架的都好改。

    楼主属于锤子用多了,觉得什么都应该是钉子……
    8355
        42
    8355  
       2017-05-06 13:34:50 +08:00
    个人建议你还是把你项目情况跟客户解释清楚 问问客户是否需要重构 如果需要的话你就完全帮忙重写一个项目 直接抛弃掉这个 如果原来的数据库建的还能用就继续用 如果不行就重新洗一下数据开始你的重构吧..
    如果不需要你就继续用传统开发直接写就好了啊.
    billlee
        43
    billlee  
       2017-05-06 13:35:07 +08:00   ❤️ 1
    你这还好啊,更可怕的是自己造了个没文档的框架。。
    sobigfish
        44
    sobigfish  
       2017-05-06 13:53:00 +08:00
    感觉至少要把 view 整合下 不想上 framework 的话直接上 twig 吧( template 引擎) https://twig.sensiolabs.org/
    paullee
        45
    paullee  
       2017-05-06 13:56:46 +08:00 via iPhone
    h
    harker
        46
    harker  
       2017-05-06 14:13:51 +08:00
    建议在基础上慢慢改吧,只是原生代码生疏了,看熟老古董就好了
    Z1076
        47
    Z1076  
       2017-05-06 14:56:52 +08:00
    我现在就接手了一个这样的项目做二次开发,一个 php 文件,1w8 行,就问你怕不怕。
    Z1076
        48
    Z1076  
       2017-05-06 14:58:29 +08:00
    用 phpstorm 修改这个文件,打开的时候笔电的风扇都跟发动机一样响。真是日了狗...
    loserwn
        49
    loserwn  
       2017-05-06 15:00:39 +08:00
    说「上古」我还以为是 PHP3 PHP4 呢。。。中老年程序员(逃
    aksoft
        50
    aksoft  
       2017-05-06 15:15:41 +08:00
    一分钱一分货。。一步一步调试吧。
    我也这么干过,至于后来入坑者。。。
    shmilypeter
        51
    shmilypeter  
       2017-05-06 15:35:48 +08:00
    还好吧,你没见过项目中大量用了泛型,但是到部署的时候才发现,人家服务器 jdk 还是 1.4 的,那个蛋疼啊。
    Mine
        52
    Mine  
       2017-05-06 16:39:45 +08:00
    好好做,做完你就成大牛了。
    xifangczy
        53
    xifangczy  
       2017-05-06 16:41:29 +08:00
    用框架习惯了而已,按时间算已经很不错了,还在抱怨啥。去改吧。。
    fhefh
        54
    fhefh  
       2017-05-06 17:21:27 +08:00
    大量的积分

    我想成了数学的微积分 看了半天 囧
    fhefh
        55
    fhefh  
       2017-05-06 17:23:45 +08:00
    @shijingshijing #39

    见过一次 想了半天 后来我问人家 这啥意思 人家说 抱歉 忘记把字段字典 EXCEL 发你了

    我。。。
    konakona
        56
    konakona  
       2017-05-06 20:21:00 +08:00
    @danhahaha echo+table 是最痛苦的...
    xyjtou
        57
    xyjtou  
       2017-05-06 20:54:54 +08:00 via Android
    那位上古程序员难道已经仙逝?最好的办法,如果上古人士还健在!请一天的咨询费用,让人家来给你理理,回忆一下当年的设计思路,否则猜他人的思路是非常痛苦的事情,消耗的时间也更多。
    Lonely
        58
    Lonely  
       2017-05-06 21:56:38 +08:00
    真是矫情
    murmur
        59
    murmur  
       2017-05-06 21:57:44 +08:00
    ecshop 还不是这个路子 连 oom 都没有一水的 sql 拼接
    当年愣是魔改了 N 多新功能上去
    pengbo37877
        60
    pengbo37877  
       2017-05-06 22:19:42 +08:00
    只要数据库在,重新写
    yankbytes
        61
    yankbytes  
       2017-05-07 01:49:42 +08:00
    没怎么接触过前端的知识但是感觉可以先把逻辑分离?管数据的管数据,管 UI 的管 UI。不知道 js 在项目里主要是做啥,如果是实时动态显示的话考虑下转 angular 或者 react 框架? php 部分用来和数据库交互的部分就先别动啦~遇上重构的项目真的觉得心累。。。
    GoBeyond
        62
    GoBeyond  
       2017-05-07 06:51:36 +08:00 via Android
    如果只是想保稳就不要动这种东西
    johnny23
        63
    johnny23  
       2017-05-07 08:55:52 +08:00 via iPhone
    就是说 删除一个注释系统就跑不起来系列嘛 哈哈哈哈哈
    danhahaha
        64
    danhahaha  
    OP
       2017-05-07 09:27:59 +08:00
    @johnny23 问题是他妹的连注释都没有啊
    danhahaha
        65
    danhahaha  
    OP
       2017-05-07 09:28:23 +08:00
    代码还全部左对齐,感觉是故意的
    580a388da131
        66
    580a388da131  
       2017-05-07 11:53:10 +08:00
    我的初学项目就是一大堆的 echo 定界符
    huobazi
        67
    huobazi  
       2017-05-07 20:08:06 +08:00 via iPhone
    怕啥 我还维护过扩展名 php3 的……
    ychongsaytc
        68
    ychongsaytc  
       2017-05-08 01:11:30 +08:00 via iPhone
    浴火,重生。
    msg7086
        69
    msg7086  
       2017-05-08 02:50:18 +08:00
    不要多想,直接开工干就是了,读代码写代码,反正按时间收费,你慌什么。
    gowk
        70
    gowk  
       2017-05-08 11:36:40 +08:00
    rewrite it
    allgy
        71
    allgy  
       2017-05-08 14:59:44 +08:00
    @gyorou 坑定是 C 转过来的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:35 · PVG 07:35 · LAX 15:35 · JFK 18:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.