本期移动高手开发群评论的论题即是「怎样接手废物代码?」主持人是国内某跨境电商渠道 iOS 开发的负责人曹理鹏,文章系国内 ITOM 办理渠道 OneAPM 收拾:
曹理鹏:我们好,我叫曹理鹏,现在在一家跨境电商的公司做 iOS 开发,此前确实接手过「废物代码」,首要简略共享一下这个项目存在的疑问(对于 iOS 开发):
1.运用旧式构造 ASI,并且没有做任何封装和抽取;
2.字典转模型都是硬编的;
3.类名多数以拼音的办法;
4.里边我再里边总共看到了5自个的身影(只要一个看起来牛逼的),所以就有五自个的思想和代码逻辑;
5.呈现许多重复的小构造(比方下拉改写,提示框等);
6.几乎没有啥注释,有也是一些拼纷歧样的姓名的解说;
7.最多代码是一个类里边有6000多行代码;
8.文件的逻辑构造与物理构造几乎不对应;
9.没有运用 Cocoa Pods,全部构造都是拖进去的。
近来的时刻都是在「填坑」,填了一个有一个,致使自个都快没决心了,所以就有一个很激烈的主意,谈谈怎样接手废物代码的疑问......
李小三:你们见过 把 doc 文档放工程里的吗?你们见过一个 controller 里有1000行的 UI 吗?一个挺杂乱的界面有许多视图。我接手的代码,一点注释都没有,自个连猜带蒙把注释加上了,几乎......(后续吐槽省掉)
马方华:这种状况我从前搞过,不影响功能的状况下,我会写个编译宏。正常的下跑老代码。别的的渐渐把新代码加进去。
沈钦伟:我是在确保项目能正常运转状况下,渐渐改里边的,等我新改的悉数能用了,就把老功能搬迁到我的新代码上。不过,有些东西,这个老项目 Bug 是越改越多,动的时分需要小心谨慎。
丽娟:我从前也接手过外包代码,我先把有关bug改好,再一点一点抽取代码,有次一个页面相同的接口别离写了四五遍。
蒋连成:我的做法是,首要不要过度优化,做到有关逻辑,把有关逻辑获取出来优化。暂时无关的逻辑先放着。从小到大一点点来,先把能够复用的 view 啥的,一点点获取出来封装。对比忌讳的是一上来就想着悉数优化,过度优化往往会「吃力不讨好」。能用是最首要的,其次才是好用!
马方华:写代码的时分,我通常看下微信classdump后的头文件。看他们怎样写。类是怎样封装的。然后再自个写,自个写的也许不是格外好。
神州租车:重构仍是要理明白事务对比好,要不然改了也是成堆 bug。再者,我觉得全部仍是以本来事务为核心内容,再去对应代码对比好点吧。
曹理鹏:咱们通常都是一两天就会进行一个小的回想,计算修正好的和近期要处理的疑问。不过,每次改完今后有种刚刚看到太阳又要天亮的感受!
午夜修铃:重构,我了解是一个程序员的基因,是写在骨子里的。每个项目地点的环境纷歧样,所以代码的质量也纷歧样。通常的外包,对代码质量请求很低,重视的是时刻。所以写的都对比差。这个是毋庸置疑的。不能用这个来评估一个程序的水平。再者,刚说的一个功能写了屡次,首要疑问不在重构,而在交流。
程序员是一群「偷闲」的人,累多了,才会去想办法偷闲,咱们这次评论,要点不是接手与否,而是你碰到了后,怎样处理?
阮涛:先跟着断点走一遍,了解之前的逻辑才好着手改啊。
腾讯微信:遇到这种代码我通常是不会接手的,就算接手了也是新的功能用自个新的构造。
马方华:少写播送。感受这么改代码也便利许多,
沈钦伟:本来许多项目是功能优先,时刻越短越好。决策层看的不是你代码写的多么美丽,是功能有没有完成,尤其是外包项目!况且许多项目都是没到2.0就死了。
王云振:对于界面杂乱的 Controller,是不是能够思考把界面一块一块的封装成一个View。
曹理鹏:也即是 MVC 的思想去改!
蒋连成:通常状况下,是将每次功能有关的逻辑优化,该提出来的提出来,该复用的复用。一个模块一个模块来。不了解的逻辑,尽量不要动,能够先改改构造。
比方将一些东西独自封装到 category 中,逻辑不动,仅仅方位移动。
午夜修铃:我了解差一点的代码,不仅仅重构,就比如刚刚主持人说的,疑问本来许多。要一条一条收拾。假设我遇到,第一步,也许是先处理目录构造,把目录调整好。
Eric 胡:现在咱们公司用的是 MVP 形式。
曹理鹏:不知道是不是有人,边改边抽到一个新的项目里边,当新的项目成型了就抛弃老的,不知道这么是不是?
蒋连成:测验怎样办?测新项目仍是老项目?发版是发新的仍是老的?首要,时刻会很长,你需要两端统筹。
丽娟:最佳仍是一份代码,两份代码太累了。
Eric 胡:好的规划形式感受对新人来说压力太大。
曹理鹏:每自个都说说遇到的疑问吧,或许自个的经历!
李小三:代码尽量要一致。
午夜修铃:我遇到对比差的,或许是很别扭的(纷歧定是差,仅仅很别扭)
1、修正目录,修正成我以为看着舒畅的,通常这一步曩昔,就大约知道有多少是重复的了。一起找东西会便利些;
2、修正类的初始化办法,初始化办法改成自个看着舒畅的,或许是传参明晰的。这么后边用的时分,我会对比随手;
3、依照功能收拾类中的办法。首要是优化逻辑,功能上不思考;
4、调优功能;
5、开端去掉抽取办法和类,有第一步和第三步,根本上这儿去掉没用的类就现已对比便利利了。
根本都是遵从从大到小,从全体到部分的办法。
王岳明:我说的对比实践的啊,勿喷!废物代码必定会有,格外对于大型项目,最首要的是安稳。接手废物代码当然对比厌恶,但需要从时刻本钱和人力本钱上去思考,只要资本满足的状况下才去做重构优化,不然最佳仍是以平常心对待。有代码洁癖的同学,新增代码最佳按代码标准来写,老代码能改则改,真实保护不下去了则有必要重构。
Eric 胡:我的第一个观念即是,肯定不要呈现硬编码,全部的装备也不放在代码里。前期要断定好构造,不要想着今后再重构。假设功能安稳,我会在他的规划思路上进行保护,新功能我会在自个的 library 里去完成。
Waizau:从前是,有时刻的才会重构再持续开发,不然真实会一边写自个的代码一边骂的。
李小三:接手,先别动,渐渐修正,以完成任务为主。不是一朝一夕的工作
马方华:废物代码的构造通常很难改。一改即是两三个 Bug。然后就被领导问话去了。然后谈代码质量。
阳华:咱们是先铺点,把商品功能点先上去,等商场验证后,再把原代码重做。
Waizau:本来不应当依照代码行数来断定一个类是不是啥的,一个一万行代码的类,你拆开十个类来写?除了一些能够重用的办法有必要抽出以外,假设真遇到都不能重用的,还有必要拆开来写吗?
曹理鹏:对于烂代码的那些事(上)
对于烂代码的那些事(中)
窝窝:从前接过一个架构很坑爹的项目,要迭代,只能平心静气的多打log盯梢了解。
Reic 胡:我遇到一个项目。用 MVP 形式开发,后来编程 VP 形式了,后来又编程 MVC 形式了,真实是......至于怎样接手?我感受只能是不断的 Debug ,打 Log ,看熟看懂。就好像看一自个相同,一天两天不了解,时刻久了,感受那自个的思想办法也渐渐把握了。
然后,即是画uml图、思想导图还有流程图 ,我是真实看不懂的就删去吧!我感受废物代码都没啥规划形式可言,画图就很明晰了。
管振伟:再废物的项目代码,也不能开端就推倒重来。重构需要对需要的充沛了解,还要满足的测验用例确保。不然你也许要好久才干有一个用来发布的版别,还有成堆 Bug。并且通常项目交给都有时刻的束缚。然后充沛了解需要,了解初始代码的目的很要害。有条件最佳能多和初始作者交流。
马方华:先改大头。不然代码越来越烂。一改即是大 Bug。并且不容易定位。
曹理鹏:假设为了项目的久远,或许咱们要在里边呆久下去,光光改一些 Bug 或许需要并不行!
罗飞:我们评论真火热,我共享一下我的观念吧,拿到他人代码,所先要看懂他人的代码,自个要把握一些剖析代码的办法,不要扫除看他人代码。这是我剖析 PHP 程序的办法,信任移动端也能总结一些办法的。