重构
来源:互联网 发布:复合材料设计软件 编辑:程序博客网 时间: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
- 重构
- 重构
- 重构...
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- 重构
- java数据类型易错点简单总结,欢迎大神前辈补充!谢谢
- JavaScript基础——html5脚本编程
- conv--向量的卷积和多项式乘法
- 用ffmpeg 把mp4文件转为ts文件并生成m3u8列表
- IDCT的原理以及代码分析
- 重构
- OC_10_02 委托模式
- this关键字
- PLSQL DEV工具挂载官方文档
- kickstart安装centos6
- python知识-模块和包
- RabbitMQ的安装
- Jquery 和 Js 获得元素标签名称的方法
- biu~ biu~: 省市区的排序