年初入职了一家公司,公司原本Android开发只有一个人,我去了算两个。
刚开始,他给我介绍了一种目录结构,和后台用业务,模块分包类似,接触之后觉得太方便了,分享记录一下:
···
包名
模块包名
MVP{View,Presenter}(接口类)
Activity
Presenter
···
重构原因
这种愉悦的感觉并没有维持很久,当我和这位同事共同开发一个项目的时候,我进入项目的时候,他已经做了一段时间了(也许他也是从别人那接手的)。编译运行在测试机上,出现的第一个界面竟然是几个简单的按钮:侧拉主页面,登录页,还有什么。
我内心是有点崩溃的,因为巨丑,巨不讲究。然后默默搞了个主页(小作坊),然后终于能正常的业务开发了,当我开发了五个模块,对方1个模块都还没完,而且还是不讲究。正好有其它项目来,这项目就我一个人做了。
那时候项目已经快实施阶段了,我打开看他的代码,举点栗子:
- 页面之间传递参数,用的静态变量来传递。
- 滥用写文件
- 重复代码,一模一样的方法,在3个fragment中写三遍。
- 命名用tv1……tv6,et1……et6
实施的时候需要修改的巨多,每次改他的模块都痛不欲生,然后就重构。
重构模块
- 让他的类继承了我写的基类(做的模块多,自己提取的),一些每个页面都有的方法写入基类:showProcess,hideProcess,showToast,统一的title,还有项目中用到的开关NFC扫描等等。
- View继承IView接口,因为BaseActivity已经实现了IView的方法。继承是为了在Presenter中调用基类的方法。
- 界面修改,1方面是对话框页面中的et1,et2全部修改成能通过id看出这个输入框功能的id,然后是把界面显示的风格调成一致的。
- 页面的操作很复杂,单其实业务很简单:扫码-对话框填写-关闭对话框-点击保存文件-请求接口(文件就是写入的页面上的数据),我梳理了这个模块的操作模块之后,把操作流程拣货为扫码-对话框填补充信息-关闭对话框并且请求接口。
- 到这以后,差不多就算对这个模块已经了如指掌了,把乱入的静态变量修改完,重构结束,继续完成需求。
美化与减轻项目体积
经理:把界面弄好看点
我:好的
因为上面的对话,我浏览各大图片网站,icon图片,界面颜色配合,自己抠图,作图。反正就是要换很多图片,要把字体颜色,字体大小还有好多东西都要改改。
改的时候稍稍一浏览,几乎全部layout文件都要改!图片可以直接命名一样重写,但是类似这种风格的界面,重复工作量巨大:
左边一列统一,右边一列统一,然后这些TextView就可以抽象一个style出来,写style文件。其实这个没有完全做到,很多地方由于懒惰没有动。但是在第二个项目中基本从一开始就是用的style的模式,省很多事。
然后就是图片,我们这个项目不知道同事从哪个项目抠出来的,很多图片资源没有删除,而且不仅仅是图片,还有很多activity,layout,values都是无用的。我网上查了下,有工具可以查找这些文件,但是由于时间,还有其它的原因,还是一个个手动删除的。
失败案例
我在网上看见QMUI的界面,心痒痒想植入我们项目来(恰逢经理叫我美化界面),然后折腾了很久,文档说implement一个包就行,我记不得原因了,反正当时是死活不行,倔强的我把源码搞下来,import作为一个模块,emmmm,还有一些jar包冲突,再次倔强的强行解决,折腾引入可以用之后,发现最想用的功能(QMUIDialog中做得跟Toast风格很类似的提示,警告,完成,错误,加载中……),这个功能用不了,在完成接口请求之后给用户提示,那时候可能已经关闭了页面,在dialog进行inflate的时候,一次又一次闪退了。
没办法,确实不能用了呢,引入失败了呢。
补救:最后,我确实还是把那个最想用的Dialog风格用上了,把图片搞出来,自定义一个Toast,提示的Toast就没问题了;加载中的那个自定义了一个对话框,也很简单,发现自己之前就走了一堆弯路。
告诫了我不要在读源码上偷懒啊,不然走的路更多。