一个工作了 6 年的同事写的代码,不看 git 记录我还以为是实习生写的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
garlics
V2EX    程序员

一个工作了 6 年的同事写的代码,不看 git 记录我还以为是实习生写的

  garlics 2020-09-27 09:58:01 +08:00 31469 次点击
这是一个创建于 1890 天前的主题,其中的信息可能已经有所发展或是发生改变。

第一次见到那么离谱的代码,完全没有封装的意思。

 if ($config['theme'] == 1) { if ($config['plugin']['PG_SHOPPING_CART']) { $tabIndex = [ 'index' => 0, 'collection' => 1, 'bestforyou' => 2, 'cart' => 3, 'mine' => 4 ]; $tablist = [ [ 'pagePath' => '/pages/index/index', 'text' => '首页', 'iconPath' => '/assets/images/home_unactived.png', 'selectedIconPath' => '/assets/images/theme1_home_actived.png', ], [ "pagePath" => "/pages/collection/collection", "iconPath" => "/assets/images/collection.png", "selectedIconPath" => "/assets/images/collection_actived.png", "text" => "收藏" ], [ "pagePath" => "/pages/bestforyou/bestforyou", "iconPath" => "/assets/images/bestforyou_unactived.png", "selectedIconPath" => "/assets/images/bestforyou_actived.png", "text" => "为你优选" ], [ 'pagePath' => '/pages/cart/cart', 'text' => '购物车', 'iconPath' => '/assets/images/cart_unactived.png', 'selectedIconPath' => '/assets/images/cart_actived.png', ], [ 'pagePath' => '/pages/mine/mine', 'text' => '我的', 'iconPath' => '/assets/images/mine_unactived.png', 'selectedIconPath' => '/assets/images/mine_actived.png', ] ]; } else { $tabIndex = [ 'index' => 0, 'collection' => 1, 'bestforyou' => 2, 'mine' => 3 ]; $tablist = [ [ 'pagePath' => '/pages/index/index', 'text' => '首页', 'iconPath' => '/assets/images/home_unactived.png', 'selectedIconPath' => '/assets/images/theme1_home_actived.png', ], [ "pagePath" => "/pages/collection/collection", "iconPath" => "/assets/images/collection.png", "selectedIconPath" => "/assets/images/collection_actived.png", "text" => "收藏" ], [ "pagePath" => "/pages/bestforyou/bestforyou", "iconPath" => "/assets/images/bestforyou_unactived.png", "selectedIconPath" => "/assets/images/bestforyou_actived.png", "text" => "为你优选" ], [ 'pagePath' => '/pages/mine/mine', 'text' => '我的', 'iconPath' => '/assets/images/mine_unactived.png', 'selectedIconPath' => '/assets/images/mine_actived.png', ] ]; } } else { if ($config['plugin']['PG_SHOPPING_CART']) { $tabIndex = [ 'index' => 0, 'cart' => 1, 'mine' => 2 ]; $tablist = [ [ 'pagePath' => '/pages/index/index', 'text' => '首页', 'iconPath' => '/assets/images/home_unactived.png', 'selectedIconPath' => '/assets/images/home_actived.png', ], [ 'pagePath' => '/pages/cart/cart', 'text' => '购物车', 'iconPath' => '/assets/images/cart_unactived.png', 'selectedIconPath' => '/assets/images/cart_actived.png', ], [ 'pagePath' => '/pages/mine/mine', 'text' => '我的', 'iconPath' => '/assets/images/mine_unactived.png', 'selectedIconPath' => '/assets/images/mine_actived.png', ] ]; } else { $tabIndex = [ 'index' => 0, 'mine' => 1 ]; $tablist = [ [ 'pagePath' => '/pages/index/index', 'text' => '首页', 'iconPath' => '/assets/images/home_unactived.png', 'selectedIconPath' => '/assets/images/home_actived.png', ], [ 'pagePath' => '/pages/mine/mine', 'text' => '我的', 'iconPath' => '/assets/images/mine_unactived.png', 'selectedIconPath' => '/assets/images/mine_actived.png', ] ]; } } 
第 1 条附言    2020-09-27 10:50:56 +08:00

觉得离谱的原因是我现在有个需求,根据$config['plugin']['PG_CATEGORY'],增加一个

[ "pagePath" => "*", "iconPath" => "*", "selectedIconPath" => "*", "text" => "*" ], 

发现按照他这个逻辑写简直是个灾难。

第 2 条附言    2020-09-27 10:52:26 +08:00

感谢60L的老哥帮我发现了个bug

 $map = [ 'index' => [ 'pagePath' => '/pages/index/index', 'text' => '首页', 'iconPath' => '/assets/images/home_unactived.png', 'selectedIconPath' => '/assets/images/home_actived.png', ], 'cart' => [ 'pagePath' => '/pages/cart/cart', 'text' => '购物车', 'iconPath' => '/assets/images/cart_unactived.png', 'selectedIconPath' => '/assets/images/cart_actived.png', ], 'mine' => [ 'pagePath' => '/pages/mine/mine', 'text' => '我的', 'iconPath' => '/assets/images/mine_unactived.png', 'selectedIconPath' => '/assets/images/mine_actived.png', ], 'collection' => [ "pagePath" => "/pages/collection/collection", "iconPath" => "/assets/images/collection.png", "selectedIconPath" => "/assets/images/collection_actived.png", "text" => "收藏" ], 'bestforyou' => [ "pagePath" => "/pages/bestforyou/bestforyou", "iconPath" => "/assets/images/bestforyou_unactived.png", "selectedIconPath" => "/assets/images/bestforyou_actived.png", "text" => "为你优选" ] ]; $tab = ['index']; if ($config['theme'] == 1) { $tab[] = 'collection'; $tab[] = 'bestforyou'; } if ($config['plugin']['PG_SHOPPING_CART']) { $tab[] = 'cart'; } $tab[] = 'mine'; $tabIndex = array_flip($tab); $tablist = array_map(function ($v) use ($map) { return $map[$v]; }, $tab); if ($config['theme'] == 1) { $tablist[0]['selectedIconPath'] = '/assets/images/theme1_home_actived.png'; } 
第 3 条附言    2020-09-27 13:45:20 +08:00

如果他是这样写的,我估计还不会说什么,最多就默默改了,毕竟一屏也能把逻辑看完,也算逻辑清晰了。

$tabCart = [ 'pagePath' => '/pages/cart/cart', 'text' => '购物车', 'iconPath' => '/assets/images/cart_unactived.png', 'selectedIconPath' => '/assets/images/cart_actived.png', ]; if (something) { $tablist = [$tabCart]; } 

他这一屏都看不完一个if块的,真的不能忍。

298 条回复    2020-09-29 16:01:21 +08:00
1  2  3  
tcpdump
    1
tcpdump  
   2020-09-27 09:59:43 +08:00   1
起码挺工整 ,占楼,看楼下大神指点
fffflyfish
    2
fffflyfish  
   2020-09-27 09:59:50 +08:00   3
你懂啥,不把 baseline 打低一点怎么优化啊
wizardoz
    3
wizardoz  
   2020-09-27 10:01:49 +08:00   9
你以为他是手写的,其实他可能是用模版生成的。
MuscleOf2016
    4
MuscleOf2016  
   2020-09-27 10:02:19 +08:00
咋优化?提取公共写常量?
tabris17
    5
tabris17  
   2020-09-27 10:02:22 +08:00   11
都写 PHP 了,还封装啥呀,先完成 KPI 才是正道
raincode
    6
raincode  
   2020-09-27 10:03:33 +08:00
起码变量名挺规范 ,占楼,看楼下大神指点
oukichi
    7
oukichi  
   2020-09-27 10:03:48 +08:00   36
你可以优化一下然后贴出来,这样不但提高自己而且帮助别人。毕竟吐槽大家都会,但解决问题的人就少了。
warlock
    8
warlock  
   2020-09-27 10:04:41 +08:00   2
如果是模板生成 那么应该加上 Code generated by xxxxx. DO NOT EDIT. 避免误会
zhoushushu
    9
zhoushushu  
   2020-09-27 10:05:14 +08:00   9
我也经常这么写,过度封装,接手的人还得琢磨。
futou
    10
futou  
   2020-09-27 10:05:17 +08:00
#7 +1,等待优化结果
7654
    11
7654  
   2020-09-27 10:05:33 +08:00
看不爽有空就给他改了啊
victor
    12
victor  
   2020-09-27 10:06:36 +08:00
sunznx
    13
sunznx  
   2020-09-27 10:06:38 +08:00   12
@tabris17 这都能黑,你是有病吗
eGlhb2Jhb2Jhbw
    14
eGlhb2Jhb2Jhbw  
   2020-09-27 10:07:03 +08:00
有些单引号,有些双引号。有些最后元素带逗号,有些最后元素不带。强迫症就很难受。代码除了长点,问题不是很大,也比较容易阅读(当然与业务有一定关系),感觉没你说的那么严重。
jadehare
    15
jadehare  
   2020-09-27 10:07:29 +08:00
这可太工整了,也就重复代码太多,感觉你还是年轻了,没见过嵌套几层的 if
revalue
    16
revalue  
   2020-09-27 10:08:04 +08:00
#7 +2,等待优化结果

表格驱动也不大行
ingdawn
    17
ingdawn  
   2020-09-27 10:09:03 +08:00
坐等大佬封装方案
haohappy
    18
haohappy  
   2020-09-27 10:09:12 +08:00   9
起码挺工整 ,遇到事逼了
RangerWolf
    19
RangerWolf  
   2020-09-27 10:10:16 +08:00   1
楼主,把你优化之后的发出来让大家学习学习?
garlics
    20
garlics  
OP
   2020-09-27 10:10:43 +08:00
@fffflyfish
@oukichi
@MuscleOf2016
因为要改加些功能,所以我整理了下这段代码,个人认为看起来逻辑清晰很多,也希望有大神有更好的方法改
```
$map = [
'index' => [
'pagePath' => '/pages/index/index',
'text' => '首页',
'iconPath' => '/assets/images/home_unactived.png',
'selectedIconPath' => '/assets/images/home_actived.png',
],
'cart' => [
'pagePath' => '/pages/cart/cart',
'text' => '购物车',
'iconPath' => '/assets/images/cart_unactived.png',
'selectedIconPath' => '/assets/images/cart_actived.png',
],
'mine' => [
'pagePath' => '/pages/mine/mine',
'text' => '我的',
'iconPath' => '/assets/images/mine_unactived.png',
'selectedIconPath' => '/assets/images/mine_actived.png',
],
'collection' => [
"pagePath" => "/pages/collection/collection",
"iconPath" => "/assets/images/collection.png",
"selectedIconPath" => "/assets/images/collection_actived.png",
"text" => "收藏"
],
'bestforyou' => [
"pagePath" => "/pages/bestforyou/bestforyou",
"iconPath" => "/assets/images/bestforyou_unactived.png",
"selectedIconPath" => "/assets/images/bestforyou_actived.png",
"text" => "为你优选"
],
];
$tab = ['index'];
if ($config['theme'] == 1) {
$tab[] = 'collection';
$tab[] = 'bestforyou';
}
if ($config['plugin']['PG_SHOPPING_CART']) {
$tab[] = 'cart';
}

$tab[] = 'mine';
$tabIndex = array_flip($tab);
$tablist = array_map(function ($v) use ($map) {
return $map[$v];
}, $tab);
```
xpfd
    21
xpfd  
   2020-09-27 10:10:44 +08:00   3
写的挺好的啊?逻辑清晰,易读,易维护,虽然我不会 php 但是也能快速抓住逻辑,反而是一些年轻小伙为了炫技用这个晦涩的方式实现让人很头大,rewiew 的时候经常要转换理解一下,等到过一段时间自己去看自己写的代码反而迷糊了,这样的见得多了
qqjt
    22
qqjt  
   2020-09-27 10:12:07 +08:00   14
问题不大,很可能的情况是,一开始就一种菜单,之后判断条件多了,慢慢出现了多种情况的判断。
屎山不是一天写成的。
cxxlxx
    23
cxxlxx  
   2020-09-27 10:12:11 +08:00
就算写的很烂 实习生也不背锅
northisland
    24
northisland  
   2020-09-27 10:14:34 +08:00
有点慌,我也经常写这种代码。。。


2 个判断条件,对应 3 个条件。直接这么写。有毛病么?
ritaswc
    25
ritaswc  
   2020-09-27 10:14:35 +08:00
其实通俗易懂也是个有点哦,我做讨厌在业务代码里面炫技了
a719031256
    26
a719031256  
   2020-09-27 10:15:00 +08:00
过度封装不好,如何简单明了的表达意思就好,业务代码讲究效率,谁 tm 的在乎好不好看,能 10 分钟写完的东西没必要花一个小时去弄
nicebird
    27
nicebird  
   2020-09-27 10:16:06 +08:00
改成表驱动就行了吧。
iFlicker
    28
iFlicker  
   2020-09-27 10:16:28 +08:00   1
可能绩效考评参考 git 代码提交行数吧
foMM
    29
foMM  
   2020-09-27 10:16:36 +08:00
有没有哪位可以说说如何在回复里面贴图和贴代码块? Markdown 很明显是不支持的
qq976739120
    30
qq976739120  
   2020-09-27 10:16:52 +08:00
逻辑很清晰,接盘他的代码我不会抗拒
Sharuru
    31
Sharuru  
   2020-09-27 10:17:14 +08:00   1
这种东西优化顶多把 URL 路由先预设好,然后直接 tablist 里引用。
但是如果碰到一个特别的业务,然后路由对象没接口的话,改自定义值就会头大。

业务代码写多了,最后还是觉得这种平铺直叙式的写法舒服,不要考虑什么优化,糙快猛干就完事儿了。
早点堆完早点摸鱼。

白衣老人表情包.jpg
kanepan19
    32
kanepan19  
   2020-09-27 10:18:11 +08:00
我觉得没毛病,
瞎猜楼主的吐槽的原因是不是 ,对人不对事了
garlics
    33
garlics  
OP
   2020-09-27 10:18:15 +08:00   11
那么多人说写得好我还挺意外的,目前有个需求要按照判断加一个菜单,按照他这个逻辑,判断会变成 8 个,代码直接又长一倍。
binjoo
    34
binjoo  
   2020-09-27 10:18:44 +08:00
说不定人家 KPI 是算代码行数的。
eGlhb2Jhb2Jhbw
    35
eGlhb2Jhb2Jhbw  
   2020-09-27 10:18:56 +08:00
@garlics #20 你咋也是单引号双引号混用,末尾逗号爱加不加。PHP 都这么写的吗?
zhangjiafan
    36
zhangjiafan  
   2020-09-27 10:19:10 +08:00   25
什么是事儿逼,你就是事儿逼,elseif 不是一天写出来的,而是隔了几天老板开始 else if 的,并且是晚上八点半冷不丁来一句加个需求,这个时候,你会继续 elseif 还是会想优化代码,然后优化几小时吗?从你发帖到优化花了 15 分钟,有这 15 分钟早点回家老婆孩子热炕头不香吗?
ginjedoad
    37
ginjedoad  
   2020-09-27 10:19:12 +08:00
这个是要早日起代码行数?保证占领版本库的代码百分比?
wangbudong
    38
wangbudong  
   2020-09-27 10:19:28 +08:00
我还觉得写得挺好的
KyonLi
    39
KyonLi  
   2020-09-27 10:20:17 +08:00
@foMM gist
xilixjd
    40
xilixjd  
   2020-09-27 10:21:33 +08:00
@garlics else 里,tablist 的购物车需要换个 icon,雪崩
tabris17
    41
tabris17  
   2020-09-27 10:21:49 +08:00
@sunznx PHP 就是为了快速开发,什么都想着封装一下才是有病。

这里的代码明显就是当作 DSL 使用的,还封装个毛线
Joexjx
    42
Joexjx  
   2020-09-27 10:22:09 +08:00
这代码只是看起来不高级,实际比较通俗易懂,没必要为了看上去高级,就对 ifelse 等有深仇大恨之类的
Immortal
    43
Immortal  
   2020-09-27 10:22:48 +08:00
除了$tablist 没提出去复用,和 theme == 1 这种没有可读性的代码,其他都中规中矩没问题
sagaxu
    44
sagaxu  
   2020-09-27 10:24:02 +08:00 via Android
你以为他是手写的,可能他是脚本生成。

然后,老板偷偷看新增代码行数的时候,他产出远比你高。
northisland
    45
northisland  
   2020-09-27 10:24:15 +08:00
作者喷的是
if cond1
if cond2
.... // 处理 1
else
... // 处理 2
else
if cond2
... // 处理 3
else
... // 处理 4
endif


请问怎么优化?这样把嵌套 if 条件写在一起,会扁平一点?

if cond1 and cond2:
.... // 处理 1
elif cond1 and not cond2:
... // 处理 2
elif not cond1 and cond2:
... // 处理 3
elif not cond1 and not cond2:
... // 处理 4


楼主说一下优化思路呗 @garlics
mlxj
    46
mlxj  
   2020-09-27 10:24:15 +08:00
贼鸡儿清晰分
garlics
    47
garlics  
OP
   2020-09-27 10:24:18 +08:00
不知道为什么不能 append,说写得好的各位,现在有个需求,根据$config['plugin']['PG_CATEGORY'],增加一个
[
"pagePath" => "*",
"iconPath" => "*",
"selectedIconPath" => "*",
"text" => "*"
],
请告诉我怎么加?
songyijie
    48
songyijie  
   2020-09-27 10:24:31 +08:00
@garlics 所以会不会一开始也没那么多判断, 后来需求加的
pikaconan
    49
pikaconan  
   2020-09-27 10:26:08 +08:00
我一直以为,封装是别的地方也需要用到才封装,一个地方封来封去的感觉有点浪费时间...(可能说得不对,大佬可以指点一下...
baosiqing
    50
baosiqing  
   2020-09-27 10:26:09 +08:00   1
写出这样的代码为啥还有觉得好的?我见过不止这样写,还不会格式化的,看他代码经常要研究某个括号是和哪个一起的
leo108
    51
leo108  
   2020-09-27 10:26:34 +08:00   2
确实比较惊讶这么多人可以接受这样的代码。

楼主的优化方案也不算过度封装,实现成本也就几分钟,即使未来有个别特殊需求也能简单地兼容。
hauzi
    52
hauzi  
   2020-09-27 10:28:04 +08:00   2
应该不是一次写完的,功能都是慢慢堆砌的,你觉得到了需要优化的地步,就可以优化,这就是程序开发的正常过程。
leo108
    53
leo108  
   2020-09-27 10:28:33 +08:00   2
有些人说是工作 x 年只不过是一年的经验用了 x 年
wupher
    54
wupher  
   2020-09-27 10:31:30 +08:00
如果是我的话,可能会抽象成对象,然后把现有数据转换成一个静态对象,或者直接丢到数据库表 /Cache 中。

但我觉得 3 楼说得可能更在理,没准儿这代码就是他用数据库或者模板直接生成的。
myon
    55
myon  
   2020-09-27 10:32:12 +08:00
冗余代码太多,如果有 review 的话过不了。好在逻辑清晰,我不会 php 都能看懂
tsingke
    56
tsingke  
   2020-09-27 10:33:55 +08:00
坐等楼主贴出来,自己优化后的代码,那些不贴自己的代码,光喷别人代码的人,一律当做傻逼处理。
steven_yue
    57
steven_yue  
   2020-09-27 10:33:57 +08:00
这不就是优化后的结果吗?你写成函数,包成类,最后编译器还不是给你打开了。兄弟是高手
kera0a
    58
kera0a  
   2020-09-27 10:35:42 +08:00 via iPhone   22
“第一次见到那么离谱的代码” ???

楼主可能山见少了,你贴的代码一眼就看明白了,逻辑简单和他处也没啥耦合,这种代码不会出什么问题。
不能说离谱,只能说不优雅

真正离谱的代码是
1 你看都看不明白
2 等你看明白了,你也不敢改
3 等你捋完了敢改了,你也不能确保会不会有 bug
4 产生 bug 了,你也不知道是什么原因
5 知道原因了 goto 1
ll1615
    59
ll1615  
   2020-09-27 10:37:21 +08:00
我觉得楼主的优化就很好,有些人就是喜欢复制粘贴
myon
    60
myon  
   2020-09-27 10:41:19 +08:00   2
另外你优化后的代码有 bug,首页的 selectedIconPath 是跟随 theme 变化的,看到这点我大概理解他这么写的原因了,要提取出来代码会比较绕
BeFun
    61
BeFun  
   2020-09-27 10:44:01 +08:00
通俗易懂,我觉得挺好,至少自己三个月后再来看,还能一眼看懂
stach
    62
stach  
   2020-09-27 10:44:21 +08:00
不管是实习生, 还是资深工程师代, 码逻辑清晰是业务系统最关键的地方. 当然楼主可以优化代码组织方式, 封装一下, 我相信改起来没有任何压力 (这代码蛮清晰的嘛, 没有暗坑).

不过要提醒的是, 楼主也不要过度封装, 没有哪种模式是普适的, 过度封装的副作用更大.
chenyu0532
    63
chenyu0532  
   2020-09-27 10:45:11 +08:00
记得前几年有一个巨火的手游,用 cocos2d 写的,被别人破解了。发现里面极其多的 if elseif,一层层的包着,看着都头大。。但是人家就是很火。。
个人认为,如果为了自己的代码精进,那相信在座的各位的代码都会优化;如果侧重点在业务上,就可以怎么快怎么来,自己和别人看得懂。
以前我也觉得代码优化最重要。。。但是慢慢觉得业务 /策略 /想法才是最重要的。。
tydl
    64
tydl  
   2020-09-27 10:46:05 +08:00
工整、清晰,一目了然。不建议封装~~
dustinth
    65
dustinth  
   2020-09-27 10:46:43 +08:00
封装意味着多一层抽象, 会多一层心智负担, 所以需要有代码清晰度的提高或者减少重复来作为补偿(比较明显的结果就是封装后代码行数明显变短). 楼主同事的代码没什么大问题, 更谈不上"离谱", 经过优化后代码并没有明显的代码量的降低.
coderljx
    66
coderljx  
   2020-09-27 10:46:49 +08:00
@kera0a 哈哈,很现实了
Varobjs
    67
Varobjs  
   2020-09-27 10:47:34 +08:00   2
这不算什么,毕竟 if else 嵌套的只是简单赋值;

你是没见过 很多个 if else 结构,每个包含数百行业务逻辑

然后各个业务逻辑 80-90%是相似的,
VxLzKg4uLbi32w60
    68
VxLzKg4uLbi32w60  
   2020-09-27 10:48:10 +08:00
面向过程得通俗易懂,就能说明那代码还挺好得?面向对象学的啥,我更赞同这代码不是一次写成得,导致多层嵌套了 ifelse 语句
weichengwu
    69
weichengwu  
   2020-09-27 10:49:15 +08:00
写成这样了叫逻辑清晰?如果 if 代码块里面的行数超过一屏能显示的长度,逻辑是否还清晰?
huihuilang
    70
huihuilang  
   2020-09-27 10:51:13 +08:00 via Android
建议楼主把自己的代码贴出来。。另外同事代码写得好写的不好有啥关系?自己拿自己的工资,干好自己的事情就行
garlics
    71
garlics  
OP
   2020-09-27 10:53:09 +08:00
@huihuilang 因为现在我在维护这个代码
FallenTy
    72
FallenTy  
   2020-09-27 10:53:13 +08:00
把 tableList 里面的东西封装下,根据条件直接引用观感好很多,这也能能有人吐槽事逼?还是说你们成天就是写这种代码。不过这不算太离谱的代码,起码逻辑清晰,你同事估计就是犯懒不想优化,顺便还显得代码多
huihuilang
    73
huihuilang  
   2020-09-27 10:54:17 +08:00 via Android
@garlics 那是够惨的。。。
beingbin
    74
beingbin  
   2020-09-27 10:54:45 +08:00
6 年经验×
1 年经验重复 6 年√
DonaidTrump
    75
DonaidTrump  
   2020-09-27 10:57:33 +08:00
@weichengwu 这说明该换高分辨率的显示屏了 (手动狗头
Shing
    76
Shing  
   2020-09-27 10:58:23 +08:00   1
莫笑前辈,总有一天你会经历一样的事情的。
Felldeadbird
    77
Felldeadbird  
   2020-09-27 10:58:51 +08:00   1
楼主,如果你不是管理的话,那么这代码是正常的。
如果你是管理的话,push 内容时,你应该审查代码。

所以,楼主不要按工龄看代码。这个完全看个人态度的。 我有时候也会写这种代码,因为心情烦躁 + 赶工期。一般我会注明 @todo 形式,为何要这么写。
cmdOptionKana
    78
cmdOptionKana  
   2020-09-27 11:00:41 +08:00
@weichengwu 这个代码最开始可能很短的,后来加着加着变成这么长,如果继续加需求发现代码已经变得很不合理(比如楼主现在就刚好是这个阶段),此时可以重构。

反正感觉问题不是很大的时候就按简单快速的方法先写,可以等后面眼看越来越不合理了再改。(有时等不到那个时候项目就黄了)
dustinth
    79
dustinth  
   2020-09-27 11:01:43 +08:00
再看了一下楼主的补充, 自己也说了有"新"的需求, 新需求带来代码或者结构的变化是正常现象. 以我多年编程经验来看, 过早的优化比不优化其实危害更大, 不优化大不了重写一部分逻辑, 过早优化改的时候还得把所有优化过的逻辑拆开重装.
dethan
    80
dethan  
   2020-09-27 11:02:00 +08:00 via Android
各位天天各种研究算法 结果遇到这种代码 还说好????
dethan
    81
dethan  
   2020-09-27 11:02:33 +08:00 via Android   1
恕我直言 他好就好在好他****
wxsm
    82
wxsm  
   2020-09-27 11:03:20 +08:00
相信我,这个算是不错的。真的,十几年的码农写出来的东西不如实习生的,比比皆是。我见得多了。
zxcslove
    83
zxcslove  
   2020-09-27 11:03:23 +08:00   1
原代码的写法有个大坑,就是参数里面的字符串有少许变化时,如何减少不一致的错误。而且修改时不注意发生了不一致,也很难看出来。
busymilk
    84
busymilk  
   2020-09-27 11:12:15 +08:00
最烦各种抽象,各种封装,除了作者本人,没有任何人能改的动.抽象调抽象,根本找不到实例化的地方,一会就绕懵逼了
tailf
    85
tailf  
   2020-09-27 11:12:17 +08:00   3
# 我的经验


刚学会封装的工作一年的新手最喜欢多层封装,而有经验的程序员都懂:

代码是写给人看的,只是恰好能运行。
jwenjian
    86
jwenjian  
   2020-09-27 11:13:01 +08:00
duplication is more cheap than wrong abstraction
Biebe
    87
Biebe  
   2020-09-27 11:17:37 +08:00 via iPhone
特别是那种所谓“全栈”工程师
dc25b
    88
dc25b  
   2020-09-27 11:18:45 +08:00   1
我也很奇怪为什么提一句封装这么多人急得跳脚,什么叫封装一下就看不懂了?这段代码如果是长期慢慢累积的还能理解,这要是在一个 PR 里面在我组里 review 是绝对过不了的。
jsjjdzg
    89
jsjjdzg  
   2020-09-27 11:20:26 +08:00   1
年轻精英员工和 敲了多年看了多年代码的 2 群人的碰撞,往往是精英看不上别人的
fangcan
    90
fangcan  
   2020-09-27 11:20:34 +08:00
你有看下他的其他代码么
opengps
    91
opengps  
   2020-09-27 11:21:16 +08:00
有些老旧代码,仅仅是因为一次配置不需要再次使用,我不懂前端代码,不确定这个是不是这一类
ccraohng
    92
ccraohng  
   2020-09-27 11:21:49 +08:00
我会把 url, icon 等等配置写在写在一个文件里,直接组合引用。过长的静态数据最好不要放在逻辑里, 反正我是不会这样,反正也就几分钟的事。说写得好我是没想到的
zoffy
    93
zoffy  
   2020-09-27 11:22:25 +08:00
@wizardoz #3 这波你在第五层
kimqcn
    94
kimqcn  
   2020-09-27 11:26:26 +08:00
可以干掉提需求的人
Rorysky
    95
Rorysky  
   2020-09-27 11:28:04 +08:00
手动 编译器优化,你再怎么封装,最后 都是展开的
Inside
    96
Inside  
   2020-09-27 11:30:54 +08:00   1
这波我站楼主,没有意识要做到 single point of truth 的还可以理解,但已经有这个意识了不想做、懒得做、嫌麻烦的,还是别写代码坑人了。
在我的团队里,这种问题第一次发现我会给个黄牌警告,再有下次直接红牌下场了。
myzyq
    97
myzyq  
   2020-09-27 11:33:21 +08:00
擦汗。忙起来还顾得了这么多。最少逻辑清楚,问题解决,后续其他人开发可以快速入场。
ps: 自己封装了,还要很多测试,不能保证功能正常,后续别人接手还要先搞清楚你的封装内容,理解也需要花时间。

不明白这个跟工作时间长短有什么关系。。。。
时间更长的人可能还会考虑,开发效率,接手难易,逻辑是否清晰。至于是否封装,不响效率的情况下,封装不封装有区别?
Reapper
    98
Reapper  
   2020-09-27 11:33:43 +08:00
非 php 人员,除了$tablist 没有抽出去,感觉其他问题不大,能看懂是什么意思
cumshot
    99
cumshot  
   2020-09-27 11:35:45 +08:00
六年的同事还这样写,你以为他在第一层,你在第四层,其实人家在平流层,自己琢磨去吧。
keepfun
    100
keepfun  
   2020-09-27 11:37:31 +08:00
@tabris17 #5 你是对 php 有多大偏见啊 语言无优劣 能力有高低
1  2  3  
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2438 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 29ms UTC 02:25 PVG 10:25 LAX 18:25 JFK 21:25
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