搭建好整个项目的结构
在项目初期,做好必要准备,比如搭建项目结构和做一些技术储备,这样在项目启动的时候就不会过于仓促,也有利于提高评估的时间的准确性。特别是我们这种外包公司,对项目开发的时间更加要求更高。
所谓项目结构类似于整个房子的结构,包括要使用哪种水泥,哪种瓷砖,哪种钢筋…..
项目的结构就是一个大项目的划分,分门别类,分法有许多,但我目前使用过两种分法,一种是按开发模式结构分,一种是按项目功能模块分。
先总结启动项目之前的技术储备
每个项目都不可能每一行代码都是自己实现,肯定会使用他人的框架或者库,如果公司已经有老司机,那么如何选择老司机肯定已经帮我们做好了,我们小鲜肉只要学会使用他们选好的框架或者库,如果没有我们只能自己找,可以根据自身项目的需要和自己的能力选择,个人建议开始的时候使用学习成本较低些的,等通过项目实践能力有了提高以后再去尝试难度大一些的新技术。通过搜索引擎或者技术交流群找使用人数多,并且使用门槛低一些的,所谓使用门槛低,就是文档demo齐全,易上手。
上个项目使用的库
- 请求:xutils3.x
- 图片加载:fresco
- 存储:xutils3.x
- 注解:butterknife
- 开发模式:mvc
-……
大家都知道xutils有四个模块,包括请求,图片加载,注解,存储,可是我们还另外使用了fresco和butterknife来替代图片加载和注解,存储在小项目中使用不多,基本上只使用了请求模块。只使用xutils的一个模块而把那么大的一个库给加进来,显得有点多余,明显可以使用专门的网络请求库来代替它,比如okhttp和retrofit,retrofit对于我来说学习成本比okhttp更高,曾经也和经理提过换okhttp来替换xutils,可是经理说以前的项目都使用这个也没出什么问题,为了安全起见还是不要换。。。
目前实际开发只使用过mvc,用着用着就会有更近一步的理解,mvp看过博客也写过demo,但是发现每个人写的都有所不同,没有mvc那么统一,可能这也是需要在使用时去形成自己的认识加以理解吧
下面以自己项目为例,
划分项目结构
adapter:存放项目中使用到的所有的适配器
base:存放项目中所有的基类,比如BaseActivity,BaseFragment,BaseService……
bean:存放项目中所有的实体类
customview:存放自定义视图
utils:存放项目中使用的工具类
xxxmodle:项目模块1
xxxmodle:项目模块2
xxxmodle:项目模块3
每一个xxxmodle里面再细分
- activity:存放这个模块下所有的activity
fragment:存放这个模块下所有的fragment
modle:存放这个模块下的逻辑接口
Impl:存放这个模块下逻辑接口实现类
view:存放这个模块下的视图接口
我们项目目前使用的是mvc开发模式,所以在具体的modle下除了activity和fragment,还使用了modle,Impl和view的划分
项目结构图:
现在的项目比较小,这种划分还比较使用,大项目可能有更好的划分方式
“初始化”项目
在选择好使用的框架和库之后,对他们进行初始化,以便正式开发时直接使用。这些初始化操
作一般都在Application中进行,这里千万要记的在Androidmanifest的application标签下为它指明’name’属性,当时就是忘了这一步最后运行的时候才发现。其实工具类也属于初始化,事先把所有的全局可能使用到的封装好,开发的时候直接调用,可以省去好多时间写重复的代码
统一写好通用资源,比如color,String,style,anim……
项目开发中,合理使用封装和抽象
从一个activity携带值跳转到另外一个activity是很常见的操作,比如:
`//Aactivity 传递数据给 Bactivity
Intent intent = new Intent(this,Bactivity.class);
intent.putExtra("param", "I appreciate the man who are good at Android");
Aactivity.startActivity(intent);
//Bactivity 获取 Aactivity 传递过来的数据
String param = getIntent.getStringExtra("param");`
这是一般的方式,但是这种方式有一个缺陷,在Bactivity取值的时候如果把param打错了,就会取不到值,解决这个问题的方法是:
//Aactivity 传递数据给 Bactivity
Intent intent = new Intent(this,Bactivity.class);
intent.putExtra(DestActivity.PARAM, "I appreciate the man who are good at Android");
Aactivity.startActivity(intent);
//Bactivity 获取 Aactivity 传递过来的数据
public final static String PARAM = "param";
String param = getIntent.getStringExtra(PARAM);
第二种是封装的体现,解决了第一种方法的问题,但是又产生了新问题,因为PARAM是static修饰的,所以它会一直存在于内存中,而大多数时候我们传递参数的key使用一次就再也用不到了,使用完了就应该被回收,从性能上看这样做有点不划算,使用第一种方式则在使用完后系统会自动回收,性能上不会造成影响。
我觉得吧,最好的方法是使用第一种,然后在Bactivity取值的时候回Aactivity把参数直接复制过来,这样就不用怕敲错而导致取不到值啦。
给自己”充电”
开发完一个项目,回想一下,感觉并没有从项目中学到太多,恰恰相反,不会的倒是越来越多。这其实是一件好事,当一个人觉得自己不懂的越来越多的时候,说明Ta的眼界在不断提高,走出井底才能看到更广阔的世界,世上本就没有一劳永逸的事情,特别是互联网行业,更是要不断学习。
充电的方式有许多,每个人都有差异,以下是我经常做的事
- 看书
- 逛技术网站,看博客
- 活跃在技术交流群
- 写博客总结
我把看书放前面,因为个人觉得书【最好是纸质书】虽然比较传统,但是讲解比较系统,利于
形成知识体系,而博客相对来说就比较零散,适合查缺补漏,掘金是一个高质量的技术网站,
也是我每天补脑的地方,技术交流群也是一个很好的学习平台,我指的活跃不一定是发言活
跃,而是要经常翻阅下聊天记录,看看同行们讨论的话题和分享的经验,看到没听过的就谷歌
或者百度下,增长见识,尽管有时候看不懂他们聊的高深话题,但是了解下也不错,至少以后
需要去接触的时候有了现在的了解可以缓解抵触感和畏难情绪。多了解新技术,不一定要马上
会用或者运用到项目中,但是要知道有那么回事,前面三点都是获取知识,最后一点则是消化
知识,通过写博客可以加深对知识的了解,系统化知识点,连点为线,连线为面,慢慢完善,
这样就形成了自己的知识体系,同时还能把知识分享出去,这会是另一种动力。但最终还是要
回归代码,多敲多练,把自己学到的知识实际操作几遍,没有出现未知bug才算消化了百分之
八十。