android-架构规范

前言

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

这里整理一下自己android开发中的一些规范。希望对各位有帮助。

命名规范

包命名规范

包名全部采用小写

主包名采用[公司性质].[公司名称].[项目名称]的命名方式

如果根据不同情况进行分包的话,可以将包名分别命名为util,view,    adapter等。

代码命名规范

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

常量、枚举等均采用大写形式,用下划线区分各单词。使用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 命名规范 (提高代码可以读性)

编程规范

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

作者:安东尼_Anthony

链接://www.greatytc.com/p/99239b9c1630

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容