对于软件开发上的一些思考。
估计所有的程序每天都会写很多的重复的代码,不知道写这些代码的时候有没有去思考。如何才能少些一些代码而且又能提高效率呢。
问题
1,每天大量重复的代码
2,每次代码都重新写出错的概率很高
3,浪费大量的时间(有这些时间我们可以思考一些新的问题,学习一些新的技术或者多休息休息,泡泡妞也是可以的啊)
解决办法
1,最低级办法就是去copy 这些代码。
2,将代码利用继承抽象等技术将一些公共的代码抽取出来,将变化的东西抽象出来。
第一种办法就不说了,是程序员都知道怎么做对吧。
下面说下第二种办法,就以activity 和 fragment为例来说 大大的提高我们的开发效率。
直接上代码:
package com.example.androidtest.base;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
/**
* 将activity 中经常写的代码 进行格式化
* @author 曹阳龙
*
* 2015-9-13
*/
public abstract class BaseActivity extends Activity{
//资源管理
protected Resources resources;
//上下环境
protected Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
beforeSetContent();
setContentView(getcontentView());
context = this;
resources = getResources();
onCreate();
}
/**
* 用于设置布局文件
* @return
*/
public abstract int getcontentView();
/**
* oncreat 改为内部执行
*/
private void onCreate(){
initView();
initData();
initListener();
}
/**
* 提供这个方法原因 , 主要 有一些代码需要在 setcontent 之前调用 如 : window窗口的设置
*/
public void beforeSetContent(){
}
/**
* 首次 必先初始化 view
*/
public abstract void initView();
/**
* 初始化数据 从网络 获取数据 数据添加到 view 等逻辑 工作
*/
public abstract void initData();
/**
* 初始化 view listener 的工作
*/
public abstract void initListener();
}
下面是basefragment 的代码 其实和上面基本上差不多
package com.cyl.androidtest.base;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* fragment 代码进行格式化
* @author 曹阳龙
*
* 2015-9-13
*/
public abstract class BaseFragment extends Fragment {
protected Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(setContentView(), container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
context = view.getContext();
onViewCreated(view);
}
public Context getContext() {
return context;
}
public void onViewCreated(View view){
initView(view);
initData();
initListener();
}
public abstract int setContentView();
/**
* 首次 必先初始化 view
*/
public abstract void initView(View view);
/**
* 初始化数据 从网络 获取数据 数据添加到 view 等逻辑 工作
*/
public abstract void initData();
/**
* 初始化 view listener 的工作
*/
public abstract void initListener();
}
对于baseactivity 简单写个例子。
package com.example.androidtest;
import com.example.androidtest.base.BaseActivity;
/**
* 在这里继承与baseActivity 对应的方法 ide 就会直接生成了 我只需要写我们的业务逻辑代码就 ok了
* @author cyl
*
* 2016-2-12
*/
public class TestBaseActivity extends BaseActivity {
@Override
public int getcontentView() {
//这里写我们的布局文件
return R.layout.test_activity_layout;
}
@Override
public void initView() {
//这里 findviewbyid 初始化组建 button textview viewpager imageview 等等
}
@Override
public void initData() {
//settext 初始化 view上的数据 ,从网络获取数据
}
@Override
public void initListener() {
//给组建设置 响应的事件
}
}
今天就说到这里。