文档章节

Android开发架构规范

china灬xiaoyu
 china灬xiaoyu
发布于 2016/07/29 20:13
字数 2253
阅读 30
收藏 2

命名规范

包命名规范

  • 包名全部采用小写
  • 主包名采用[公司性质].[公司名称].[项目名称]的命名方式
    如果根据不同情况进行分包的话,可以将包名分别命名为util,view, adapter等。

代码命名规范

命名规则有很多高大上的名词,比如大驼峰,小驼峰,匈牙利命名法。其实最简单的就是按照谷歌命名学习。

  • 常量、枚举等均采用大写形式,用下划线区分各单词。使用static final
    例如:private static final String TAG_FOR_ACTIVITY = "XXXX";
  • 类名、接口名、枚举名。第一个和后面的单词都要第一个字母大写
    例如:MainActivity,PersonalLoginActivity
  • 资源文件命名
    例如:activity_main.xmlic_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 命名规范 (提高代码可以读性)


编程规范

  • 源文件编码格式为 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

参考文章

Android进阶之路——安卓编程规范
Google官方MVP+Dagger2架构详解
网络图片加载的封装
Good-Android-development-habits


 

文/CameloeAnthony(简书作者)
原文链接:http://www.jianshu.com/p/99239b9c1630
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

© 著作权归作者所有

共有 人打赏支持
上一篇: Android系统构架
下一篇: 此博客的说明
china灬xiaoyu
粉丝 5
博文 15
码字总数 8720
作品 0
青岛
程序员
私信 提问
[北京]大型互联网公司招聘Android/iPhone客户端高级开发工程师 【猎头】

Android/iPhone客户端高级开发工程师 淘宝网-北京研发中心-无线开发 北京 工作年限 3年以上 学历要求 本科 岗位描述 根据需求进行Android/iPhone客户端软件的设计、开发和维护 规范编写设计和...

melody123
2012/05/16
106
0
北京大型互联网公司16-22K招聘Android/iPhone客户端高级开发工程师

工作年限 3年以上 学历要求 本科 岗位描述 根据需求进行Android/iPhone客户端软件的设计、开发和维护 规范编写设计和维护文档; 负责与产品、运营及各协作团队的沟通和资源的协调推动 岗位要...

candy
2012/05/14
476
1
【北京】淘宝网招聘资深Android/iPhone客户端开发工程师、 手机WAP开发工程师

请在投递简历时,邮件标题为“[姓名]-应聘-[职位名称]”。职位名称选用下述职位说 明!!投递信箱为boxin@sillinfo.com 如有任何疑问可与我联系,以下为具体联系方式: TEL: 010-68158195-80...

jbxyk
2012/04/26
1K
3
Android 快速框架 ZBLibrary18.3 发布,自动生成请求代码

18.3 更新内容: 支持APIJSONAuto自动生成的请求代码; OKHTTP升级到3.11.0; 升级sdk,gradle,app的版本; 替换已失效的图片URL; 坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架...

孤独的探索号
2018/09/12
1K
2
[评论]究竟什么才是自主研发和自主知识产权?

最近也看了关于国产自主知识产权的操作系统COS的一些争论,尤其是有人拿到真机用同步工具看到其为Android 4.1.2后,网友讨论异常激烈。但无非就是两种观点:一是就是安卓,做的皮肤+内置App...

oschina
2014/01/25
3.1K
51

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 姑娘馋的口水都留下来了。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @且无需多言 :分享Fall Out Boy的单曲《Disloyal Order Of Water Buffaloes》 《Disloyal Order Of Water Buffaloes》- Fall Out Boy 手机党...

小小编辑
今天
125
7
vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
9
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部