zoukankan      html  css  js  c++  java
  • 怎么去除重复代码

     

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

    无论你的项目大或小,定义一个基Activity或Fragment总是有好处的。对于Activity或者Fragment,抽取基类BaseActivity、BaseFragment,在基类中抽取一些所有子类都需要用的方法,比如initView()、initListener()、initData()、initStatusBarColors()、startActivity()、showToast()、checkNetConnected()等方法。或者在基类里面做一些项目特色的事情,再或者添加一些统计,崩溃反馈等等。在一个基类里面改动总比把每个Activity或Fragment里面都改一遍要好的多。

    2、抽取相同部分

    从代码上去除重复的代码就是用通用的重构技巧,比如提炼方法,抽象基类,提炼常量等。

    但是光是代码还不够,因为Android的页面代码跟布局文件的关联非常大,通常Activity或者Fragment都是为了操作布局页写的,所以要想彻底的减少代码的重复,还必须先减少布局的重复。 

    能够抽取基类的抽取基类,让所有的子类可以同时使用;
    能够抽取工具类的抽取工具类,让整个项目的所有类都可以随时随地调用;
    能够抽取方法的抽取方法,让本类中可以重复的调用,而不用在一个类中写大量重复的代码;

    3、用include减少局部布局的重复

    对于xml布局文件,在多个页面中同时出现的、可以重复利用的,就单独抽取出来,使用include标签引入,比如 标题栏、下一步按钮,等等一些可以抽取出来的公共的部分;

    标签是减少布局重复的利器,它的作用是把另外一个布局文件全部无修改式的嵌入到标签所在的位置。这与C/C++语言的预处理指令#include是一样的。

    要想把include用的恰到好处,首先要做的就是把整体布局模块化,从整体的布局出发,找出可复用的局部布局或布局组合,把它们放入单独一个布局文件中,然后在其他的地方就可以include了。

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

    前面是找出布局中的可复用布局组合,include以减少重复。但有些时候是反过来的,也就是说有几个页面,它们整体的一样的,但是某个局部是不同的,这个时候include就不行了。这个时候就可以使用一样的整体布局+ViewStub来做布局。

    ViewStub是一个轻量级别的,不可见的View,当ViewStub被设为visible时,或者显示调用layout()时,才会去把它所指向的布局渲染出来,所以它非常适合处理整体相同,局部不同的情况。关于ViewStub的使用可以参考这篇博客。 具体的策略是:

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

    5、多用引用而不是写死

    对于资源文件的引用,比如文字text、文字大小textSize、文字颜色textColor,全部采用引用,不要全部写死到布局文件中,对于文字text一律写到string中、对于文字大小一律写到dimens中、对于文字颜色textColor一律写到colors中,然后统一引入到xml布局文件中,对于类似 "我的" 的布局文件中,图片或者文字的颜色、大小、宽高等属性都一样,可以用style标签引入;

    这点是非常重要的,Android的强大之处在于,所有的资源的指定都可以用引用,而非直接写死,直接写死就会出现重复代码,比如颜色,背影,字串,布局,ID,度量(dimen),风格等等。那么,我们在使用的时候,也尽可能的使用引用,这样非常易于复用,修改和定制,从而也就更方便复用。

    对于文字:

    <TextView
       style="@style/user"
       android:id="@+id/tv_fdrawer_username"
       android:text="@string/username"
    />
    <style name="user">
            <item name="android:layout_width">wrap_content</item>
            <item name="android:layout_height">wrap_content</item>
            <item name="android:textColor">@color/black</item>
            <item name="android:textSize">@dimen/listing_textsize</item>
        </style>

    对于图片:

    <ImageView
         style="@style/listingimage"
         android:src="@drawable/listing_image_dog"/>
    <style name="listingimage">
            <item name="android:layout_width">wrap_content</item>
            <item name="android:layout_height">wrap_content</item>
            <item name="android:layout_marginBottom">10dp</item>
            <item name="android:paddingTop">@dimen/listing_dog</item>
        </style>

    6、分析,分离变与不变

    其实代码的去重复的关键都在于要分析出可变与不可变,共性和特性,这是抽象与封装的基础。这个没有直接可操作性的建议,只能靠自己平时多多积累,以及遇到问题时多多思考。

    另外,就是对于重复的定义是达到三次及三次以上。如果仅出现二次,并且,无可能出现别一次,这个时候其时,要不要去重复有在商榷,写第二次时,花时间重构,与拷贝或重新实现,其实代码差不多。当发现第三次实现某个东西时,就要考虑好好的重构一下,减少重复。

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

  • 相关阅读:
    冒险岛数据封包分析
    【转】安装版系统封装入门详细解说
    拦截其它程序的网络数据封包
    封包加密解密-01
    vs2010下载Microsoft Visual Studio 2010 Express(vs2010中文版下载)速成官方合集正式版
    《Visual C++开发实战1200例 第1卷》扫描版[PDF]
    《Visual Basic开发实战1200例》包括第I卷、第II卷共计1200个例子,本书是第I卷,共计600个例子。
    服务器上常见软件
    HDU1686
    HDU3336
  • 原文地址:https://www.cnblogs.com/Jackie-zhang/p/9890378.html
Copyright © 2011-2022 走看看