Android开发架构规范,带你解答未解之谜。

前言 在开发中,一个良好的开发习惯以及一个开发规范可能会让你少走不少弯路,也会必定程度上的提升代码的可读性,可维护性和可拓展性。当随着需求的不断变动,须要维护项目的时候。当随着项目的代码量的提高,须要重构的时候。你会明白一个好的开发规范多么多么的重要。java

这里整理一下本身android开发中的一些规范。但愿对各位有帮助。android

命名规范 包命名规范git

包名所有采用小写 主包名采用[公司性质].[公司名称].[项目名称]的命名方式 若是根据不一样状况进行分包的话,能够将包名分别命名为util,view, adapter等。github

代码命名规范编程

命名规则有不少高大上的名词,好比大驼峰,小驼峰,匈牙利命名法。其实最简单的就是按照谷歌命名学习。服务器

常量、枚举等均采用大写形式,用下划线区分各单词。使用static final 例如:private static final String TAG_FOR_ACTIVITY = "XXXX"; 类名、接口名、枚举名。第一个和后面的单词都要第一个字母大写 例如:MainActivity,PersonalLoginActivity 资源文件命名 例如:activity_main.xml,ic_launcher.png 注意图片文件命名只能用小写字母、数字,不然会致使R文件没法编译出来。也是比较费心的。 继承自安卓组件的类,通常采用父类名做为后缀, 例如:class LoginActivity extends Activity{} 自定义异常必须以Exception结尾 全局变量添加全部者前缀:实例成员变量前缀m(表示member),类静态变量前缀s(表示static), 例如:protected Subscription mSubscription; 控件变量添加组件前缀,顺序在全部者前缀以后,控件缩写button->btn,textview ->txw,listview->lst等 例如:全局名称mBtnNext局部名称btnNext 构造方法采用递增方式(参数多的写在后面),参数少的调用参数多的构造函数。这样也减小初始化代码。好比开源库PagerSlidingTabStrip网络

更多命名规范架构

以前收藏的这篇文章比较全。Android 命名规范 (提升代码能够读性)mvc

编程规范 源文件编码格式为 UTF-8。 java代码中不出现中文,最多注释中能够出现中文 服务端能够实现的,就不要放在客户端 引用第三方库要慎重,避免应用大容量的第三方库,致使客户端包很是大 处理应用全局异常和错误,将错误以邮件的形式发送给服务端 图片的.9处理 使用静态变量方式实现界面间共享要慎重 单元测试(逻辑测试、界面测试) 不要重用父类的handler,对应一个类的handler也不该该让其子类用到,不然会致使message.what冲突 activity中在一个View.OnClickListener中处理全部的逻辑 strings.xml中使用%1$s实现字符串的通配 数据必定要效验,例如字符型转数字型,若是转换失败必定要有缺省值;服务端响应数据是否有效判断 对于未完成的方法,使用TODO加以标记 若功能已完成,但存在效率等潜在问题时,使用XXX加以标记 若代码存在严重问题或仅用于调试,使用FIXME加以标记 values目录下文件名称较固定,不得随意更改 代码提交规范 咱们使用的不管是git,仍是svn都须要遵照下面这些规范,我的比较倾向于git。框架

工做目录要及时更新,不要和服务器有太大的差异 提交代码时,若是出现冲突,必须仔细分析解决,不能够强行提交 提交代码以前先在本地进行测试,确保项目能编译经过,且可以正常运行,不可盲目提交 必须保证服务器上的版本是正确的,项目有错误时,不要进行提交 提交以前先更新 提交时注意不要提交本地自动生成的文件,好比咱们Android Studio项目中的 idea,build文件夹是不须要提交的。 不要提交本身不明白的代码 提早协调好项目组成员的工做计划,减小冲突 对提交的信息采用明晰的标注(写注释) 使用git以及github,相信stormzhang的从0开始学习 GitHub 系列会对你有很大的帮助。

架构规范 这是我整个系列文章从零开始搭建android框架系列的重点,因此这里放在最后面。

架构方式

是选择MVP,MVC,MVVM ,Flux仍是clean 架构?

,+dagger2?+rxjava?+Retrofit/okhtttp?+loader?+databinding?+contentProvider?

谷歌官方架构示例android-architecture,以及我以前github中整理的架构合集能给你答案。

开源库的选取以及封装。

对开源库的选取,通常都须要选择比较稳定的版本,还有做者在维护的项目

,好比这里在github搜索image,出现的安卓中的图片加载库。除了考虑star,还要考虑做者对issue的解决,以及开发者的知名度等各方面。

选取以后,必定的封装是必要的。

网络图片加载的封装这篇文章可能会从图片加载封装的角度给你讲讲封装的必要性。架构提示

这里尽可能写出本身想到的点。

抽象层面上:

提升架构的拓展性是有必要的。 之前的框架可能会出现功能不足的状况,可是由于这点是不可预见的,因此咱们选择框架时必定要了解好框架自己的扩展性如何,或者对框架有较深的理解,可以本身扩展框架, 提升架构的稳定性 架构的文档也是必不可少的。 具体操做时:

activity和fragment里面都会有许多重复的操做以及操做步骤,因此咱们都须要提供一个BaseActivity和BaseFragment,让全部的activity和fragment都继承这个基类。 来看看咱们BaseActivity中都提供了哪些操做:

必要的注释真的会必定程度上的下降你的工做量,而不是提升。 好比说我使用Rxjava作加载数据的操做。这里面的流程可能稍显复杂,可是可以step1, step2的写在上面,可以让别人看懂,本身维护也方便。

数据提供统一的入口。 不管是在mvp,mvc,仍是mvvm中,提供一个统一的数据入口,均可以让代码变得更加易于维护。 好比,我使用的DataManager,里面的http仍是preference,仍是eventpost ,仍是database ,都在DataManger里面进行操做,咱们只须要与DataManger打交道。

多用组合, 少用继承 提取方法, 去除重复代码。 好比在个人架构中,我会吧imageloader单独的抽取出来做为一个widget,把对RecyclerView的封装单独抽取出来,把下拉刷新上拉加载抽取出来。以下图:

对于必要的工具类抽取也很重要,这在之后的项目中是能够重用的。

不要使用魔鬼数字/字符串/尺寸值/颜色值,正确的命名等 好比日间模式和夜间模式的对应颜色值,一看就很清晰了。

引入Dagger2 减小模块之间的耦合性 Dagger2 是一个依赖注入框架,使用代码自动生成建立依赖关系须要的代码。减小不少模板化的代码,更易于测试,下降耦合,建立可复用可互换的模块。 参考以前的文章 Google官方MVP+Dagger2架构详解 为你的项目引入Rxjava+RxAndroid这些响应式编程吧。极大的减小逻辑代码,让你爱上写代码停不下来。 经过引入** Event Bus(事件总线,这个项目使用的是otto)。它容许咱们在Data Layer中发送事件,以便View Layer**中的多个组件都可以订阅到这些事件。好比DataManager 中的退出登陆方法能够发送一个事件,订阅这个事件的多个Activity在接收到该事件后就可以更改它们的UI视图,从而显示一个登出状态。 固然你也能够有不少的选择,EventBus,Otto,自定义RxBus等。减小回调。 添加日志打印,用于查找错误等。 logger 以及timber是我推荐的。 须要使用BuildConfig.DEBUG标记对Log进行封装,只在调试时输出重要信息,正式版不输出 TODO more 写在最后:

码字不易看到最后了,那就点个关注呗,只收藏不点关注的都是在耍流氓!

关注并私信我“架构”,免费送一些Java架构资料,先到先得!

相关文章
相关标签/搜索