重构屎山的痛。我已经坚持了三四天了,必须要在这里发泄下,不然会炸。

2023-09-14 14:32:13 +08:00
 villivateur

因产品整合需求,要把一个 C++ Qt 写的上位机软件重构到 PyQt 中。主管不同意用现有框架直接包装原有的 Qt 程序,要我直接按需求重构。(可能主管也早就意识到了这个屎山迟早会炸)

这个屎山有多屎呢:

  1. 十年前的老代码,经手过无数人
  2. 编译一下,平均一个文件十个 warning ,不乏长度为 9 的数组访问第 9 个变量这种奇葩事
  3. 变量名潇潇洒洒,驼峰的,下划线的,大写的,小写的,混合的
  4. 真正实现了“低内聚,高耦合”,三个线程,几十个函数,共用一个一百多行的结构体……
  5. 有个功能是初始化两个设备(互相独立),两个设备各要执行几个函数,结果代码里面,是 A 设备先执行两个函数,B 再执行两个,再执行 A 的……不懂的人还以为这两个设备有啥奇妙的联系。
  6. 驱动模块和业务模块居然用 extern 来共享一个变量……

还有很多……

给大家欣赏一下屎山的一角:

scanThreadData->mcuFirmWare_path = "";    //清空 mcu 固件路径
scanThreadData->mcuFirmWare_path = ScanFirewareBin(IS_NGFDFILE, ProductCodeStr);

这个 mcuFirmWare_path 是个 string 类型的数据,我 TM 谢谢他先给我清空,还煞有其事地写个注释。

看这个代码,每看一行我都要理一下自己的脾气。

13191 次点击
所在节点    程序员
102 条回复
chinaguaiu
2023-09-15 22:14:29 +08:00
@putyy 怎么个说法,请教一下,我 C 不是太懂。是因为字符串值没有正确释放吗?我看见有些人写 java 会有这种写法,故意让垃圾回收器工作。C 这样写的话那块内存直接就回收不了吧?
makejohn2015
2023-09-16 14:59:43 +08:00
@Chad0000
这不就是微服务吗.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/973749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX