一个6000行MainActivity项目的重构计划(序)

作者: 岱zy | 来源:发表于2017-06-27 16:21 被阅读1182次

嗯,这可能是一个惊悚的标题

毕竟在接触到新公司项目之前,也想不到会有人把MainActivity写到6000行,写代码的真的不是一位灵魂作家吗

截图为证,6000行不含糊

开始时对同事提出了相关疑问,反而被教导,当前项目已经基本稳定,对于内部代码宁增勿减

然而,一个基本稳定的项目,却小问题不断,修改默认的录像质量从1080到720,还需要去 ctrl + f 去查找修改代码内部七八处地方? (差评,都不能全局替换,当然能告诉我这个参数在哪个方法哪一行的同事我也是佩服的)

在我看来,对代码宁增勿减,说白了就是自己没有吃透看懂,或者是一时偷懒,图个方便,还有根本不愿意去解决修改代码后产生的后续问题。却不知道自己一时偷懒,会对后期维护造成多大的影响。正是这种宁增勿减的想法,才造成项目在不断推进的过程中愈发臃肿,还直接或间接的引发一系列程序bug而无从下手。

从问题代码总结问题

1.粘贴代码

这是最常见也是最不能容忍的问题,简单封装一下,抽成方法,不仅使用起来更加方便,简化了代码,查看起来也会更加清晰,出现问题也能更好定位和解决,仅仅是举手之劳,何乐而不必为呢。

2.消息传递混乱

不知道为什么最开始写代码的同学为何如此钟爱Handler,虽然源码中也有使用Handler集中处理大量事件的情景。但是对于一个所有功能写在MainActivity中的程序,呵呵。另外一个比较坑的问题是,这个6000行的代码里,handler还是结合广播使用的,是的,你没猜错,一个activity发广播通知自己注册的接收器再发message通知自己的Handler再转发一条新消息通知handler在另外一个case中处理最后执行方法

恭喜你看完了,也许你有和我一样的心情,神经病啊。

还是想说能有接口回调处理的问题,就用接口回调,RX都这么火了,观察者模式的好处还不够明显吗。Handler虽然也很好用,但目的不也是为了流程更简单吗,越用越复杂的Handler还是尽量避免吧。

3.关键参数不抽取

这个不用多讲吧,已经是基本要求了。没谁愿意改个参数去翻无数个地方,和粘贴代码一样不能忍。

4.if else 死忠党

这可能不是什么大问题,但是无数个if else 的迷之缩进... 呵呵,我想报警。switch case 大法好,另外AS早就可以一键转换if else为switch case 了。

5.滥用标志位

有些时候确实需要多个标志位来对一个事件定性。但是拜托在定义标志位的时候取一个简单易懂的名字?清醒脱俗什么不需要啊,越简单越直白越好,并且定义标志位开始就应该考虑好标志位变动的相关情况,多个标志位也尽量按条件集中处理。要确任标志位在一个逻辑流程中的状态,而不是这里一下那里一下,重复设置标志位的同一状态,平白增加阅读难度。

6.不写注释

为什么不写注释?为什么不写注释?为什么不写注释?写注释多好的习惯啊,记录参数,标注方法,类首说明....明明这么多东西可写!!!

7.一个类搞定一切!!!!

最后还是来说一下这个最可怕的问题吧,6000行的MainActivity确实骇人听闻,不论是从MVC到MVP,DataBinding和MVVM,还有Dragger2,都在不断的为我们的程序解耦,将功能模块划分更清晰明确,让维护更简单轻松,学了这么多年设计模式编程思想,我相信这应该都是历史遗留问题了吧

另外,Handler持有Activity的弱引用写法,项目中同样也没有注意,也发现这个问题许多同学都不太了解,若是有读者也不清楚的,还是赶紧百度一下吧。其实不论AS还是Eclipse都会有明显的黄色警告提示会引发内存泄露,我也是从这里发现并尝试解决才一直记在心里。 在IDE中写代码,一定要尝试解决所有警告,绿色看的才会心情舒畅呀

那么,什么样的代码才是我们想要的呢?

没错,就是优雅易维护的代码。完美的总结。哈哈

准备将这次的重构计划完整的记录下来,先立个序,满满的吐槽,又一次提醒自己优雅的代码是如何重要。

后面会随着自己重构项目的进度继续发文。

相关
一个6000行MainActivity项目的重构计划(一)
话唠,关于重构的一些想法

相关文章

网友评论

  • 大Z哥:鄙人做iOS,一个主要的Controller写了800多行,已经烦的要死,逻辑有点乱了,想重构一下,也暂时没找到好的方法,郁闷中...
  • 050c03d397f8:方法名就能看出来了啊
  • 西风兔:等着看后续。。。
  • granton_zhuang:其实就是历史遗留的问题,如果这份代码很老,在那个安卓开发大家都是摸索的阶段,没有用上新技术,模块化做得不好是很正常的。
    如果这份代码很新(最近一两年),那就是安卓组负责人的锅,不管是基础框架还是代码 review 都没做好。
    另外,开发都是跟着需求走的,如果项目已经稳定不再改动,人手还是应该分到新的需求上面。
    重构没有想象中那么简单,建议划分好一些点,针对每个点写好单元测试,一个点一个点的重构,每个点重构之后确保跑通单元测试和整体测试再进行下一步,并且在版本控制中做打 tag 之类的操作。
    岱zy: @granton_zhuang 应该算是比较新了,就是这两年的项目
  • shengshengboom:为了适配我一直在代码布局,好长
  • 六边形战士:我表示写过1个 2000行+的Activity,每一修改都头疼
  • 容华谢后:看着同事写的8000行代码的Activity发呆😳
  • BertSir:吓得我赶紧看了一下我曾经5100行的Activity
  • jockie911:我的activity全是 @Override
    jockie911:好神奇 还真有Override这个用户
  • null_null_:凡是超过1000行的都拆分重构包括xml...
  • Souv:吓得我赶快看了一下我的Main,400行不到。
  • dfe147f4a102:主要是不常编程然后要自己写一个项目 你问我怎样知道?咳咳。。。
    岱zy: @_v君 过来人😂
  • c2aac4cb8197:我有一同事,每天叫我过去给他解bug😂
  • 孜拾遗忆:突然想到我兄弟肖一行
  • 真的放飞自我:好的代码不需要注释
    我想成为创业者:@男人1984 嗯嗯 我也觉得 最好还是命名规范 看命名直接能懂 除非真的需要注释 不喜欢那种没必要的注释
    SnapKit:@男人1984 对的
    岱zy: @男人1984 我也希望遇见这样的好代码🙁
  • neverwoods:不理解6000行怎么写出来的。我个人最多写到1000行,之后就发誓不会再写出来任何一个超过500行代码的 activity。我也做到了,总归是有办法去做的
  • 红发_SHANKS:中间夹杂了一段注释,你没看见“WTF,后面的哥们儿小心,我挺不住了...."
    心若冰清_:这个牛B,下次我写代码的时候,也这么干,而且中间是英文版的,不然万一露馅了呢,O(∩_∩)O
  • 东方未曦:同感。。。很多人喜欢复制代码,这种行为太糟糕了,对同一个项目组的人来说简直是灾难。
  • AlicFeng:了不起!
    岱zy::smile: 谢谢鼓励~重构还在进行中~果然点赞和阅读会让人动力满满~
  • 爱言语论:最多的八百多,不过现在还没有自己独立开发过项目,都是做模块开发,或者修改别人的代码
  • 菲利柯斯:😂6000行,这哥们厉害,我最多也就2000行,还是一个相对业务逻辑比较复杂的页面?全部都是edittext,
    菲利柯斯: @ziyu16901 这人也是大神,是不是到处都是重复的代码
    岱zy:是一个录像的app,包括录制和相关业务全部写在了Activity中
  • 梦华芳秋:我一个Activity写了1000行,:grin:
    岱zy:我自己写过最长的activity也就五六百行,之后也是深恶痛绝:grin:

本文标题: 一个6000行MainActivity项目的重构计划(序)

本文链接:https://www.haomeiwen.com/subject/ofuecxtx.html