重构

来源:互联网 发布:复合材料设计软件 编辑:程序博客网 时间:2024/04/30 08:27

重构的定义

重构(Refactoring)这个词最初由Martin Fowler 和 Kent Beck给下的定义,它是一种修改,使软件的内部结构更容易理解,在不改变软件的可见行为方式前提下使软件更容易变更…它是一种有节制的整理代码、使bug产生几率最小化的方法。

重构的目的

  • 重构可以改善软件的设计
  • 重构使软件更易理解
  • 重构有助于找到bug
  • 重构有助于提高编程速度

重构的手段

  • 去除重复的代码和死代码,使设计逻辑更加清晰。
  • 利用现有信息,不断简化代码,使它们在将来变更时更加容易安全。

何时开始重构

  • 项目中存在重复代码
  • 类或方法过长
  • 项目中模块耦合性比较高
  • 缺少必要的注释,同时也有很多过多无用注释。(代码简介之道)

Android项目重构

重构分两步走:
1、建立AndroidLib类库,将与业务无关的逻辑转移到AndroidLib。我们只需要让主项目保持对类库的引用即可。既然抽取出来类库,那么我们应该至少包含哪些东西呢?

  • activity:所有的activity的基类,这些是不涉及到具体的业务逻辑处理的,和主项目中的activity包下的不同,主项目中的都是涉及到具体的业务逻辑处理。
  • utils:这里主要是封装我们的工具类,比如常见的DateUtils、BitmapUtils、LogUtils等。
  • net:这里主要是封装的网络模块。
  • cache:存放的是缓存图片和缓存数据的处理。
  • ui:存放自定义控件。

2、将主项目中类进行分类划分。同上面的分类相似。

主要几个注意点:
1、为Activity进行重新定义结构。

我们常见在activity:

    public class MainActivity extends Activity implements OnClickListener {        private ListView listView;        private Button btn_click;        @SuppressLint("NewApi")        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            listView = (ListView) findViewById(R.id.listView);            LinearLayout linear = (LinearLayout) findViewById(R.id.linear);            linear.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);            btn_click = (Button) findViewById(R.id.btn_click);            btn_click.setOnClickListener(this);            new LoadData().execute();        }     }

在一个onCreate方法中,我们执行了很多事情,初始化控件、设置监听、加载数据。这样写在一起就显得代码非常的拥挤,在代码重构中,我们应该控制一个方法的长度,不能太长,100行左右吧!针对上段代码,我们完全可以将这些公共的部分抽取出来。比如我们提取出一个BaseActivity。

    public abstract class BaseActivity extends Activity {        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            initViews();            setOnClickListener();            loadData();        }        /**         * 初始化控件         */        public abstract void initViews();        /**         * 设置监听         */        public abstract void setOnClickListener();        /**         * 加载数据         */        public abstract void loadData();    }

然后让我们的activity继承BaseActivity。

    public class MainActivity extends BaseActivity{        private ListView listView;        private Button btn_click;        private LinearLayout linear;        @Override        public void initViews() {            setContentView(R.layout.activity_main);            listView = (ListView) findViewById(R.id.listView);            linear = (LinearLayout) findViewById(R.id.linear);            btn_click = (Button) findViewById(R.id.btn_click);        }        @Override        public void setOnClickListener() {            btn_click.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    // TODO Auto-generated method stub                }            });        }        @Override        public void loadData() {            new LoadData().execute();        }    }

这样是不是简介有条理很多。

2、规范统一项目中的事件模型

最常见的就是设置监听。

    public void onClick(View view){        switch(view.getId()){            case R.id.action_settings:                break;            case R.id.btn_click:                break;            default:                break;        }    }

这种方式需要比对id,有点浪费时间,不如直接设置省事。

    btn_click.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {            // TODO Auto-generated method stub        }    });

3、Adapter的重构
我们在开发中使用Adapter非常多,众多的Adapter有大量的方法都是重复的,我们就可以提取出来。参照Android提高篇之Adapter的抽象整合

0 0