项目模块重构分享与思考

作者: 黄俊彬 | 来源:发表于2018-07-06 15:13 被阅读37次

前言

背景

云盘产品,文件模块的业务功能相对复杂,包含文件的显示、排序、筛选、加密隐藏、批量移动复制等功能。项目代码可以追溯到14年以前,中间也有N多人的接手,目前还是存在非常多问题,维护及扩展也是相对比较吃力。

最近由于产品功能正在策划,大约有一周时间可以对项目进行优化。故决定对文件模块进行梳理重构。在开始之前,这里先抛出几个问题,相信大部分的同学也可能有类型的疑问,在文末的终结也会谈一下自己的看法。

  1. 业务需求频繁,开发功能都来不及,哪里有时间进行代码重构
  2. 公司并不看重代码质量,首先要满足功能开发。重构这个事情,做了也不一定被认同。等一下重构后,产生新的问题,后果更严重
  3. 这代码改起来真是蛋疼,好几个类功能都一样,新增或者修改都需要改几个地方。但是没办法,为了赶时间,暂时先这么干吧
  4. 想重构,但是却不知道如何下手。有时候有点空闲的时间,又感觉不够。所以一直没有动

文件模块情况

简单类关系图

这里简单介绍一些文件模块目前的一些问题。先看一些类的关系图。

image

类说明

说明
MyFileFragment 显示文件及文件操作的Fragment
FileMainActivity 文件主页面,依赖MyFileFragment
BaseList2Activity 文件列表基类,显示文件
MyFileActivity 作用和MyFileFragment相同,全局很多跳转到文件页面都是使用该类,继承了BaseList2Activity
DiskMusicActivity 音乐模块,从网盘导入音乐文件,是一个提供音乐文件选择页面,继承了MyFileActivity
AddAttachmentActivity 聊天模块,从网盘选择图片,是一个提供图片文件选择页面,继承了MyFileActivity
DiskSearchActivity 文件搜索页面,继承了MyFileActivity
FileListBaseFragment 文件展示页面,与BaseList2Activity类似
FileChooseActivity 网盘文件选择页面,是一个提供选择文件页面,依赖FileListBaseFragment

主要存在问题

在项目的开发维护工程中,主要存在的地方如下:

1、存在多个功能相似的页面,例如MyFileFragment及MyFileActivity,功能高度相同。全局跳转到文件页面使用了MyFileActivity,文件主入口使用了FileMainActivity。由于历史原因,一直维护着2个类,新增功能和修改功能都要维护2个地方

2、文件列表显示存在多个类,BaseList2Activity、FileListBaseFragment、MyFileFragment

3、文件选择也有多个页面,音乐选择一个DiskMusicActivity、图片选择一个AddAttachmentActivity、还有附件选择一个FileChooseActivity

经常出现产品加一个功能,要几个类修改,并且有时候修Bug容易遗漏地方。

重构

思路

在准备开始动手重构之前,先梳理了一下思路。

1、先搞清楚目前存在问题,哪里不爽。分析解决问题的方案

2、尽量不要动到原有的业务逻辑,着重于结构的升级

3、分解重构执行步骤,尽量细化成小任务,每个任务不相互影响。由于时间有限,争取每完成一个小步骤的重构,都能达到上线的状态

执行

根据目前存在的问题及重构思路。本次重构主要解决3个大问题。

1、在项目中要干掉MyFileActivity,统一使用MyFileFragment。不要再同时维护2个相同的功能的类

2、统一文件列表的显示,避免出现多个显示文件的类

3、全局应该统一一个文件选择的页面。避免出现选择音乐一个界面、选择图片一个界面、选择附件又一个界面

阶段一

阶段一主要有优化处理1、2点。这里先上一下简单类结构关系图

image

1、将MyFileActivity移除,新增BridgeFileActivity(继承了FileMainActivity),替代MyFileActivity。将全局文件跳转统一替换到BridgeFileActivity,BridgeFileActivity最终依赖了MyFileFragment。这样将文件主要操作的代码统一在了MyFileFragment,避免维护多个相同功能的类。

2、将文件的基础显示都FileListBaseFragment中,MyFileFragment继承于它。MyFileFragment扩展文件的操作功能。如删除、复制、移动、加密等功能

3、由于MyFileActivity的移除,原继承于它的DiskMusicActivity、DiskSearchActivity等都需要进行改造。重新定义DiskMusicFragment、DiskSearchFragment继承于MyFileFragment。将原来的Activity依赖于新定义的Fragment。

至此完成第一阶段,对原业务都未进行修改。只是将跳转入口进行替换。成功移除了MyFileActivity。解决上述问题1、2。

阶段二

阶段二主要优化第三点,并且重新命名类名。同样先上下简单类结构关系图

image

1、对FileChooseActivity进行扩展,使用Builder模式进行配置,支持文件类型的筛选显示。废除DiskMusicActivity、AddAttachmentActivity。

音乐筛选页面代码跳转:

 FileChooseActivity.IntentBuilder builder = new FileChooseActivity.IntentBuilder(this);
        builder.setChoiceMode(ChoiceMode.MULTI)
                .setEventBusFlag(Signature.signature(this))
                .setShowLocalFileList(false)
                .setYywSelectType(FileChoiceParams.MUSIC)
                .setSupportCheckAll(true)
                .launch();

图片筛选页面代码跳转:

 FileChooseActivity.IntentBuilder builder = new FileChooseActivity.IntentBuilder(this);
        builder.setChoiceMode(ChoiceMode.MULTI)
                .setEventBusFlag(Signature.signature(this))
                .setShowLocalFileList(false)
                .setMaxLimit(15)
                .setYywSelectType(FileChoiceParams.PIC)
                .setSupportCheckAll(false)
                .launch();

总结

回到一开始抛出的问题,这里做一下自己的总结思考。

1、业务需求多,时间赶这是常态,时间要靠自己规划及提高效率挤出来。在开发的时候也要充分考虑,不能盲目追求功能实现。 一般项目上线后,新功能策划都有一段空白期,善于利用

2、不管公司重不重视代码重构。首先多思考、优化重构,对自己也是一种提升。相信在重构的过程,自己也可以有所收获

3、项目存在种种的历史遗留问题,有时候重构与不重构就是一个长痛和短痛的取舍。自己负责的模块代码不优化,加需求,改Bug,最终坑的还是自己

4、项目重构是不断演化的过程,没有一蹴而就。

相关文章

  • 项目模块重构分享与思考

    前言 背景 云盘产品,文件模块的业务功能相对复杂,包含文件的显示、排序、筛选、加密隐藏、批量移动复制等功能。项目代...

  • Android 架构设计之项目重构【组件化篇】

    项目演示: 1.组件化重构效果 这里先看下我们重构前后的框架图比较: 重构前: 重构后 ft_xxx表示业务层模块...

  • Android项目重构改进优化计划

    一、项目重构基本架构 二、公司的业务重构,按模块划分(业务模块基于基础架构之上) 1. 启动页引导优化(3工作日)...

  • 完了!用完NSCache怀疑人生了....

    在最近的一次项目模块化实践中,我重构了Hybrid模块的API分发机制。重构中使用了NSCache,结果bug改到...

  • Android签名文件的正确打开方式

    概述 最近在重构项目分享模块,测试微信分享和百度地图都需要签名正式包,测试实在不是很方便,所以找了一些方法,现在记...

  • 架构设计之MVP模式

    这几天思考项目重构的问题,我就啰嗦两句。项目重构说白了就是为controller减负,解耦合。之前项目都是使用mv...

  • Android单元测试调研

    1.调研背景 项目面临的问题 代码拆分重构后,是否存在问题不好判断,需自测与重新测试。 逻辑较复杂的模块,人工代码...

  • Android模块化设计方案模型图

    最近在重构公司的一个项目,准备把项目进行模块化,顺便记录一下在重构过程中的一些感想。 Android发展到现在,...

  • 项目重构计划

    项目重构 横向代码耦合——业务代码之间没有明显的模块边界,模块之间调用呈网状结构。纵向代码耦合——没有合理的纵向分...

  • 前端重构方案了解一下

    前言 前端技术发展很快,很多项目面临前端部分重构,很开心可以让我进行这次项目前端的重构方案编写,在思考的同时参考了...

网友评论

    本文标题:项目模块重构分享与思考

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