阅读历史 |

第45章 代码审查(1 / 2)

加入书签

请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。

周一上午九点,林晨坐在工位上,盯着GitHub页面上那个刚刚创建的PullRequest(代码合并请求),心跳有些加速。这是他在新公司的第一个PR。

过去一周,他几乎每天加班到晚上十点,周末也泡在代码里。任务不算复杂:为一个DeFi(去中心化金融)项目的前端添加一个质押收益计算器组件。他用了自己最熟悉的React方式完成了开发,自测了几遍,功能都正常。

鼠标在“Createpullrequest”按钮上悬停了十几秒,林晨深吸一口气,点了下去。页面跳转,PR编号#347出现在屏幕上。他顺手在Sck的技术频道里@了TechLead陈峰:“陈哥,质押计算器组件的PR已提,麻烦有空review一下”。

消息刚发出去,陈峰几乎秒回:“收到,上午处理”。

林晨松了口气,起身去接水。路过陈峰的工位时,看到对方已经点开了PR页面,眉头微皱,手指在键盘上快速敲击。回到座位,林晨强迫自己不去刷新页面,转而开始看项目里另一个模块的代码。但注意力总是不集中,每隔几分钟就忍不住瞥一眼屏幕右下角的Sck图标。

这种等待代码审查的感觉,比他预想的要焦虑。在上一家跨境电商公司,他的代码审查通常很顺利——十年老员工,对业务系统和代码库了如指掌,提交的PR往往只有些格式小调整。但在这里,一切都是新的:新技术栈、新编码规范、新的最佳实践,甚至新的思维方式。

上午十点半,Sck图标终于闪动起来。

陈峰:“@林晨看完你的PR了,问题比较多,我们快速过一下?现在方便的话来小会议室”。

林晨心里一沉,回复:“好的,马上来”。

拿起笔记本和笔,他走向走廊尽头的小玻璃会议室。推门进去时,陈峰已经坐在里面,面前的MacBook屏幕上正是那个PR的页面,右侧评论栏里密密麻麻的红色标记。

“坐”。陈峰指了指对面的椅子,语气平静但严肃,“我们先整体说,然后你回去逐条修改”。

林晨坐下,打开笔记本准备记录。

“首先,功能实现没问题,计算逻辑是对的”。陈峰开门见山,“但问题出在代码质量、安全性和可维护性上。我一条条说,你记一下”。

他滚动页面到文件开头:“第一,TypeScript类型定义太松散。你看这里”,他指着屏幕,“erInput:any,这等于没定义类型。我们项目要求严格类型,所有变量、函数参数、返回值都必须明确定义。用any在审查中直接会被打回”。

林晨点头,快速记下:“明白,我改成具体类型”。

“第二,智能合约交互部分”。陈峰翻到另一段代码,“你直接调用了合约方法,但没有处理可能的失败情况和Gas费估算。这在Web3前端是必须的——每一次链上交互都可能失败,可能耗光用户Gas费。你需要加上try-catch,加上loadg状态,加上预估Gas并提示用户确认”。

“这个我确实没考虑到……”林晨如实说。在传统Web开发里,API调用失败通常只是重试或报错,但涉及真金白银的Gas费,完全是另一个维度。

“第三,代码结构”。陈峰继续,“你把所有逻辑都写在一个组件里,计算函数、格式化函数、状态管理全混在一起。按照我们项目的规范,计算逻辑应该抽离成独立的纯函数,放在utils目录下;格式化函数也应该独立;状态管理考虑用Ztand而不是全用eState,因为这部分状态可能在应用其他地方也需要访问”。

林晨看着自己那八百多行的组件文件,突然意识到问题所在——他用了最快速、最直白的方式实现功能,但没考虑后续维护和扩展。

“第四,安全问题”。陈峰的语气更严肃了些,“你这里用了eval吗”?

林晨一愣:“没有啊……”

陈峰指向一段动态计算公式的代码:“虽然不是eval,但你用newFun动态执行用户输入的计算公式,这本质上和eval一样危险。如果用户输入恶意代码呢?即使在我们自己控制的前端,这种模式也绝对禁止。计算公式必须白名单化,只允许几种预设模式”。

林晨背后冒出冷汗。他确实为了方便,允许用户输入自定义计算公式,然后动态执行。这在传统Web也许还行,但在涉及加密资产的环境里,简直是漏洞。

“第五,样式问题”。陈峰翻到最后,“你用了内联样式和大量!iportant覆盖。我们项目用TaildCSS,要求原子化样式类。另外,响应式设计考虑不足,在移动端布局会乱”。

他停下来,看向林晨:“暂时就这些主要问题。细节评论我都在代码行里加了,总共……四十七条评论”。

四十七条。林晨感觉脸上有些发烫。工作十年,他从未在一个PR里收到过这么多修改意见。

“陈哥,抱歉,是我没熟悉好规范”。他诚恳地说。

陈峰摆摆手:“不用道歉,新人第一个PR都这样。Web3开发,尤其是金融相关,安全性和代码质量的要求比传统Web高几个数量级。一笔错误交易可能造成用户永久资产损失,一个合约漏洞可能被黑客利用导致项目归零。所以审查严格是必须的”。

他顿了顿,语气缓和了些:“但你的优势也很明显——实现速度快,基础逻辑扎实,没有低级错误。只是需要适应我们的标准和思维方式”。

↑返回顶部↑

书页/目录

都市重生相关阅读: 三国:少帝别慌,我带了颗龙蛋 穿越奥布:新人类总帅 女扮男装!男校里所有男主都爱她 原神:开局负债,无奈成为执行官 在西幻世界的我喜夺万人嫌剧本 残疾小少爷他柔弱不能自理 盛世如你所愿,别再做我的梦 昨日尾调 年代1983:我在东北做木工 漫威:卡玛泰姬唯一真神,李宇 游戏入侵:我开挂偷空仇家底蕴 [希腊神话]蛇蛇被发誓钟情后 沙漠神豪:九千万亿爆改戈壁滩 抗战:李云龙当警卫,全团杀疯了 四合院:末日房车苟成神 九幽宅邸录 穿成反派的我靠沙雕苟活 1978:我靠每日情报赶山致富 反派:背景通天,哪里都有点关系 异世帝国崛起,开局君临天下 红楼:绛珠有弟嘉靖,随母入贾府 大雍无冕 身为武神,抽象一点怎么了 我对象的alpha人设有点怪 重生2017我把总裁前任踩成渣 顶级偏爱:拳王的心尖清冷神医 与你共感 股海明灯:财富战法 村长快顶不住了 重生美利坚:从农场主到商业帝王 乞帝传 从真灵命匣变成先天灵宝开始 都市送快递的我逆袭学霸 三十加二手男巅峰从离婚开始 极道噬魔,浊世演武 四合院:大灾之年,过分了啊! 美艳老妇绝育,改嫁四次,生多宝 穿成假千金后,我靠玄学爆红了 我是妖魔的心上人 回到2002,从写挂开始 从浣熊市开始轮回 不良反应尚不明确 失格落日 小黑的魔帝分身 末世异能武尊 斗破:我能固化万物天赋 我也没办法啊,前男友不让我死 陌生新婚 横刀岭南,斩断西方伪史 华娱:都重生了,谁还当演员啊 青舟异闻录 修仙是门实验科学 终末:神谕游戏 凤逆天:君主的暗影妻 废柴女驭兽师:神兽大军踏碎凌霄 [崩铁]让游戏公司再次伟大 大秦:天道金榜曝光了我 恶犬攻绑定上司的乖狗系统 斗罗绝世:终焉神锋 被我锐评的她们都成真了