Android如何高效减少代码重复

访客 280 0

重复的代码一直都是影响可维护性的主要因素,重构的关键任务之一就是消除重复代码,有效地减少其存在。这样做可以显著提升软件的可扩展性。

在Android开发中,重复的代码很常见。由于Android采用组件化和模板化的开发方式,每个页面都是通过Activity或Fragment来实现,并且布局文件使用XML编写。这种方式很容易导致代码的重复。尽管两个页面可能非常相似,但毕竟是两个独立的Activity,所以我们只能将其拷贝一份并进行修改来解决问题。

Android如何高效减少代码重复-第1张图片-谷歌商店上架

那么,我们应该采取哪些措施来消除代码的重复呢?

为你的项目定义一个基Activity或Fragment

无论你的项目规模大小,定义一个基Activity或Fragment总是有好处的。随着项目的发展,会有大量的公共代码可以抽离到基类中。此外,还可以在基类中实现一些项目特色功能,比如添加统计、崩溃反馈等等。通过在基类中进行修改,要比逐个修改每个Activity或Fragment要方便得多。

代码的去重复技巧

通过使用通用的重构技巧,如提炼方法、抽象基类和提炼常量等,可以从代码中消除重复的部分。然而,仅仅处理代码还不足够,因为Android的页面代码与布局文件密切相关。通常情况下,Activity或Fragment是为了操作布局页而编写的。因此,要彻底减少代码的重复性,必须首先减少布局文件的重复性。

用include减少局部布局的重复

标签是一种有力的工具,可以减少布局重复。它的作用是将另一个布局文件无需修改地嵌入到标签所在的位置。这类似于C/C++语言中的预处理指令#include。在WEB框架式开发中,HTML模板也经常使用类似的include方式,以达到减少代码重复的目的。

要想在使用include时达到最佳效果,首先需要将整体布局模块化。从整体布局出发,找出可复用的局部布局或布局组合,并将它们放入单独的布局文件中。然后,在其他地方就可以轻松地进行include操作了。

用ViewStub减少整体的布局的重复

在布局中,我们通常会使用可复用的布局组合和include来避免重复。然而,有时候情况恰恰相反,即存在几个页面整体相同但某些部分不同的情况。这种情况下,使用include就无法满足需求了。这时候可以考虑使用相同的整体布局加上ViewStub来实现布局。

ViewStub是一个轻量级、不可见的View。只有当ViewStub被设置为可见或者显式调用layout()方法时,它才会渲染指向的布局。因此,它非常适合处理整体相同但局部不同的情况。关于如何使用ViewStub,请参考这篇博客。具体的策略是:

  • 规划整体布局,抽象出共同的布局,把可变的布局识别出来
  • 写整体布局,对于可变的局部布局用ViewStub替代
  • 用一个基Fragment来操作整体布局。
  • 创建基Fragment的子类,每个子类,用真正的布局来替换ViewStub。

多用引用而不是写死

这一点非常重要,Android的强大之处在于可以使用引用来指定所有资源,而不是直接写死。直接写死会导致重复的代码,比如颜色、背景、字符串、布局、ID、尺寸和样式等等。因此,在使用时我们应尽可能地使用引用,这样更易于复用、修改和定制,从而方便实现复用的目标。

分析,分离变与不变

代码去重的关键在于分析可变和不可变、共性和特性,这是抽象和封装的基础。虽然没有直接可操作的建议,但可以通过平时积累和思考问题来提高自己的能力。

此外,对于重复的定义是指出现三次及以上。如果只出现两次,并且不可能再出现一次,那么是否需要去除重复就值得商榷了。在第二次出现时,花时间进行重构、拷贝或重新实现其实代码差不多。当发现第三次实现某个东西时,就应该考虑好好地进行重构,以减少重复。

还有,就是,在项目开始不要考虑的太多,不要过度设计。孤认为,不过过度设计,更不要过早优化,就根据需求和进度和发展状况综合来看。当出现了重复,需要重构时就立马去做,这样就不会出问题。但如果没能及时去做重构,欠了债,那么由于涉及代码,功能和模块都比较多时,再去重构,难度大,风险也大。就好比房屋的维护保养,当出现灰尘时就去打扫,很容易,个把小时就搞定了,但如果一直拖着,一年才打扫一次,可能要十天半个月才能完事。

我很抱歉,但是您没有提供任何需要改写的内容。请提供原始文本,我将乐意帮助您进行修改和编辑。

我很抱歉,但是您没有提供任何需要改写的内容。请提供原始文本,我将乐意帮助您进行修改和编辑。

转自:http://toughcoder.net/blog/2014/10/25/tricks-to-remove-duplicates/

标签: 布局 代码 局部 项目

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~