同事代码写的太烂了怎么办?

2021-09-03 15:22:39 +08:00
 wh469012917

1. 命名不规范

一个项目中控制器命名能出现好几种变形,一个对的都没有:

UserContol 、UserControl 、UserContoler 、UserControler

包括模型也是:

UserMode 、UserModle 、UserModol

变量命名更是离谱,单字母和语言关键字乱用:

a 、b 、c 、class 、string 、byte 

再然后就是缩写和语意不符合的:

  1. context 缩写成 c
  2. UserImage 缩写成 ui
  3. template 写成了 temple

数据表和模型名称不一样的:

  1. 表名叫做 user_rule, 模型名叫做 RuleUserModle
  2. 表名叫做 order_mgr,模型名叫做 OrderManageMode
  3. 表名叫做 order_manage,模型名叫做 OrderMgr

因为命名不规范,他后面出现了很多删除 A 表的数据,却用了 B 表的模型来操作,导致错删~

字段名称和值不统一的:

  1. 创建时间字段 creat_time 、create_time 、created 、created_time 每个表都不一样
  2. 而且值有保存时间戳,有的保存时间字符串

2. 业务代码

如果说命名混乱就算了,至少比较好改,但是业务实现也混乱:

  1. 没有任何封装概念,重复代码都是直接复制粘贴;没有任何分层的概念,控制器-模型一把梭过去,一个控制器方法 300 行起步
  2. getUserById(string username) 命名叫做通过 ID 查询用户,传入的参数却是 username
  3. getUserList() 命名叫做获取用户列表,返回值却是某一个特定条件的单个用户
  4. 所有的请求都不做参数验证,并且也不做逻辑验证。删除操作,都没判断用户是否有权限删除,直接给他删除了,删除了还不算,有些关联的数据不删除,这一下子就出现了一堆的脏数据
  5. 查询启用状态的用户列表,先把所有用户拉出来,然后在代码中遍历循环过滤禁用的用户

3. 数据库设计

数据库设计更混乱不多说了,就说几点:

  1. 关联的外键命名没有任何规范,全凭心情;比如订单表上正常情况下要有一个用户 id 字段(一般命名为 user_id),他这个字段命名叫做 user_order,要么就是叫做 user_function,反正就是自己看得懂
  2. 以上好歹设计了外键,有些干脆不设计外键;用户收货地址表上,正常情况要有一个 user_id, 用来标记这个地址是哪个用户的;他直接在用户表上创建了一个 addres 的字段,然后把地址表的 ID 用逗号分隔拼接成字符串,保存到用户表上,每次查询用户地址列表都是取出来分割,然后一条条去查;删除就更暴力了,直接删除地址,用户表的 addres 字段都不更新
  3. orm 默认都支持维护数据的创建时间,以及数据的软删除; 但是他因为创建时间字段命名不规范,orm 默认维护的是 created_at 字段,他表设计是 creat_time,然后在模型中配置的字段又是 create_time,导致框架不会维护,于是就全部自己实现
  4. 数据软删除也是配置错误,然后自己代码中去维护,写的乱七八糟

公司同事写的代码,是我这么多年来见到的最烂的代码,但是因为人家来的年限资历比较长,也不好意思去提这个事情,有没有啥好的办法,自己重构吗?

10883 次点击
所在节点    程序员
115 条回复
yunluw
2021-09-03 20:33:11 +08:00
心疼你 50ns
leafre
2021-09-03 20:42:49 +08:00
千万别离职,这岗位祸害人
potatowish
2021-09-03 20:56:45 +08:00
这种操作很明显是外包的做法,别问我怎么知道的,各种骚操作让人又好气又好笑
howencilx
2021-09-03 21:02:51 +08:00
这也太随意了吧,他自己看着不难受吗
hallDrawnel
2021-09-03 21:04:19 +08:00
如果需求需要改动到旧代码,就跟 leader 说明情况,适度重构一小片代码出来,脱离原有的路径,隔离出一个范围自己开发。
如果是新的功能,做非侵入式修改,然后把逻辑嵌入到旧代码里。

然后写个文档充分说明这个情况,把风险尽量告知相关人,不然出了事情还得背锅。推动 code review,当然有的 leader 自己就很菜,他根本没办法区分什么是好代码什么是坏代码,只是风起飞了把这只猪给吹上去了。
fiypig
2021-09-03 21:06:21 +08:00
改着改着自己变成那个风格哈哈哈哈
qiaobeier
2021-09-03 21:24:53 +08:00
使用工具,不符合基本规则不让 push 。有条件上 code review 。实话说很影响效率,没见小公司执行这套方案的
sutra
2021-09-03 21:39:14 +08:00
是不是键盘太脏了,有些键有时候按下去不出字符?
JamChiu
2021-09-03 21:54:37 +08:00
感同身受😂😂
bintianbaihua
2021-09-03 22:21:16 +08:00
经历过 ,建议不要随便重构。也不要随便怼人, 做好自己的事情就好了。。
JamesR
2021-09-03 22:52:27 +08:00
还行,不算烂,至少能看懂。
当年他写的时候,没人教他怎么写,老板,客户又催得急,只能这样了。
FerrisChan
2021-09-04 01:25:33 +08:00
怎么还看不到 有一个能跑就行( doge
kuangwinnie
2021-09-04 05:43:42 +08:00
....自己复制自己的代码这种操作都不管吗?????
keepfun
2021-09-04 09:28:12 +08:00
这样的代码 就有点烂的过分了
gancl
2021-09-04 10:56:03 +08:00
不设计外键是对的啊
crazycarry
2021-09-04 11:03:30 +08:00
你就一个 crud 的,就这还指点江山,有那时间看看开源项目吧,觉得自己牛看看 flink,spark,k8s,tidb 的代码。我相信你自己就变 shutup
suyuyu
2021-09-04 11:28:53 +08:00
心惊胆战的点进来,怕说的就是我。还好不是-.-
wh469012917
2021-09-04 11:57:38 +08:00
@Varobjs 他格式化时间成字符串,不是用语言的时间库的,而是自己计算~
wh469012917
2021-09-04 11:58:08 +08:00
@crazycarry 不积跬步,无以至千里
wh469012917
2021-09-04 11:58:27 +08:00
@crazycarry 不积跬步,无以至千里,基础的代码质量都搞不好,还能搞得好什么呢

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

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

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

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

© 2021 V2EX