Android软件设计规范---命名规则/代码包设计规则等

如果你将源码作为产品发布,就需要确认它是否被很好地打包并且清晰无误,一如你已构建的其他任何产品。

作为软件设计师,代码即是产品;不仅需要实现功能,还需有“优美、大方”的外表。

 

标识符命名法,标识符命名法最主要有4种:

1、驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。

2、帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写

3、下划线命名法:单词与单词间用下划线做间隔。

4、匈牙利命名法:广泛应用于微软编程环境中,在以Pascal命名法的变量前附加小写序列说明该变量的类型。变量的取名方式为:<scope_> + <prefix_> + <qualifier>分别表示:范围前缀、类型前缀、限定词。

个人觉得标识符命名原则:尽可能的用最少的字符而又能完整的表达标识符的含义。

 

缩写原则,比较常见的有3种:

1. 较短的单词可去掉“元音”形成缩写;

2. 较长的单词可取单词的头几个字母形成缩写;

3. 使用约定俗成的缩写方式;

如:

average  --> avg  background --> bg  buffer --> buf  control --> ctrl

delete --> del  document --> doc  error --> err  escape --> esc

increment --> inc  infomation --> info  image --> img  initial --> init

internationalization --> i18N  length --> len  library --> lib  message --> msg

password --> pwd  position --> pos  server --> srv  string --> str  temp --> tmp

window--> wnd/win  context --> ctx  configuration --> cfg  compare --> cmp

clock --> clk  clear --> clr  device --> dev  disable --> dis

display --> disp  enable --> en  function --> func  maximum --> max

minimun --> min  parameter --> param

用正确的反义词组命名具有互斥意义的变量或相反动作的方法:

add/remove  begin/end  create/destroy  insert/delete

first/last  get/set  increment/decrement  put/get

add/delete  lock/unlock  open/close  min/max

start/stop  next/previous  source/target  show/hide

send/receive  source/destination

 

包命名规范

采用反域名命名规则,全部使用小写字母,一级和二级包名固定为:com.james;三级包名根据应用进行命名,如:factorytest...四级包名为模块名或层级名。

工程中的Java文件分包:

com.james.adapter:Adapter类

com.james.domain:实体类,对象类

com.james.bean:元素类

com.james.utils:工具类

com.james.ui:视图类

com.james.activity:页面用到的Activity类

com.james.base:Android应用中使用到的基类

com.james.db:数据库操作类

com.james.view:自定义的View类

com.james.service:服务类

com.james.broadcast:广播类

com.james.constant: 常量字段类

com.james.widget: UI类

com.james.activity: Activity类

 

类(文件)、接口(文件)、方法的命名规范

类命名采用名词,首字母大写,避免使用单词的缩写(除非是总所周知的)--- Class Person

activity类:以Activity为后缀标识,如WelcomActivity欢迎页面;

Adapter类:以Adapter为后缀标识,如NewDetailAdapter新闻详情适配器;Adapter文件命名规范:负责提供数据,为数据适配器。每个类命名为:界面名+Adapter,如MainItemAdapter

Tools或Manager类:常用的工具或管理类,如ThreadPoolManager类,LogTools日志工具类;

DBHelpter类:数据库类,如NewDBHelper类,新闻数据库类;

Service类:服务类,如TimeService类,时间服务类;

ContentProvider类:以Provider为后缀标识,内容提供类;

基类:以Base开头,如BaseActivity,BaseFragment类;

接口命名采用形容词或副词,首字母同样大写,多以-able或-ible结尾 --- Interface Runnable

接口名前面需要加上I,以表明此名字为接口。

对于回调接口:实现Observer模式的接口,回调接口名称以Observer结尾;与Android相关的接口以Listener结尾;从NDK回调回Java的代码函数可以Callback结尾。

方法名采用动词和名词的组合形式,第一个单词一般是动词,采用匈牙利式的命名规范;若方法返回或设置成员变量的值,使用 getXxx()、setXxx();若返回的是boolean类型的值,一般采用is作为前缀 --- isCancel isRunning

initXxx():初始化相关的方法,使用init为前缀标识,如初始化布局方法initView();

isXxx()或checkXxx():该方法返回值为boolean;

getXxx():返回某个值得方法;

processXxx():对数据进行处理的方法;

saveXxx():与保存数据相关的方法;

 

变量命名规范

首字母小写,其他单词首字母大写,采用匈牙利式变量命名法 --- int indexCount;

尽量使用短而且有意义的单词(避免使用缩写) --- boolean isThreadStop;

单字符的变量名一般只用于生命期非常短暂的变量 --- int i, k;

如果变量是集合,则变量名用复数 --- int[] numbers;

类内部的属性变量一般加前缀m,后面跟上变量属性和功能属性 --- Button mBtnStart;

非公有、非静态的变量以m开头;静态变量以s开头;其他变量以小写字母开头。

所有常量名均大写,使用“_”间隔 --- int MAX_NUMBER;

与布局相关的控件变量命名规范

在为Android中的布局、控件的变量命名时经常会使用到一些缩写,常见缩写如下:

Llay --> LinearLayout

Rlay --> RelativeLayout

Tlay --> TableLayout

Sv --> ScrollView

Btn --> Button

Iv --> ImageView

Tv --> TextView

Et --> EditText

Mp --> MapView

Cb --> CheckBox

Rg --> RadioGroup

Rb --> RadioButton

Sp --> Spinner

Gv --> GridView

Lv –> ListView

类中的控件变量名必须与.xml布局id保持一致。

若控件变量为类的字段,以m开头;

控件变量名命名规则:类型+功能。如:mBtnBeginTest...

对象类变在方法体结束后,手动设置为null,以利于资源回收。

不要使用原义数字或原义字符串,而是使用命名常量,以便于维护。如NUM_DAYS_IN_WEEK

 

xml文件命名规范

res/layout文件夹下的.xml文件,统一用小写和下划线“_”组合命名 --> 模块名_功能名.xml

res/drawable文件中的资源:统一用小写和下划线“_”组合命名 --> 待使用文件名_逻辑名称,main_default.png

UI类文件命名规范:显示每个UI界面,每个类命名为:XxxActivity;同时界面类名和相应的.xml文件相同。如:Login.xml对应的类名为LoginActivity。

.xml布局文件全部采用小写,使用下划线命名;

adapter的子布局:功能模块_item.xml,如:main_item.xml

 

资源文件命名规范

资源文件(drawable文件夹下的文件),全部小写,采用下滑线的形式命名。

btn_功能_说明:为按键命名

bg_功能_说明:为背景命名

def_功能_说明:为默认的资源文件命名

icon_功能_说明:为图标命名

命名后缀:

select:图片状态,代表选中状态

unselect:图标状态,代表未选中状态

...

 

.xml布局文件中控件id命名规范

view缩写_模块名称_view的逻辑名称

首个单词为控件类型的缩写,其后为.xml文件的文件名,最后为控件功能名 ---> iv_login_logo

 

Android应用程序中常量定义

类中定义一些常量,如字符串常量或字符串常量,要定义为全局变量。

public static final int MENU_ABOUT= 0;

字符串常量可以定义在/res/values/strings.xml中,字符串名称的首字母小写,单词之间用“_”分割,前者为.xml文件名(用途),后者为其功能。

.xml文件中的尺寸参数定义在/res/values/dimens.xml文件中,首字母小写,单词之间用“_”间隔;首个单词为此控件所属xml文件名,其二为控件id,其三为控件属性。

 

代码注释

源代码中尽量避免连续多行,应根据功能使用空行把代码适当地分段,代码段功能尽量清晰;如不能在30秒内理解代码功能,应为之添加注释予以说明。

源程序中要有适当的注释。

注释有助于裂解代码,有效的注释是指在代码的功能、意图层次上进行注释,提供有用的、额外的信息,而不是代码表面意义的简单重复。

包含在“{}”中代码块的结束处要进行注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句。对分支语句(条件分支、循环语句)必须编写注释。

 

代码格式

一般禁止使用制表符,必须使用空格进行缩进。一个制表符使用四个空格替代。

不同逻辑程序块之间要使用空行分割。空行起着分割程序段落的作用,适当的空行可以使程序的布局更加清晰。

源代码严格遵循一致的缩进规则。

错误处理规范

Log的使用规范:

项目中使用自定义的Log输出函数,此函数的参数与Android的Log函数一致,可以根据常量控制是使用标准Log输出,还是写入到文件。

与之对应的条件编译:

为了使得最终编译的release版本不包含有Log信息,一般使用以下的做法:先定义独立的DebugFlag类:

在需要输出Log的时候,使用如下方式:

因为所定义的常量都是final类型的,若把这些常量设置为false,则编译器会优化,移除与输出Log相关的代码。

 

Android项目命名规范

一般是自己懂得严格命名规范对程序员的意义,能够参考Google Android SDK等优秀开源库的命名规范或者其他;此外在参与开发时,需要遵循统一命名规范,还需要对统一的规范加以说明。总之,需要做方面的工作:其一、养成遵循严格的命名规范的习惯;其二、以注释的形式统一说明自己或团队的命名规范。以下对我了解到的命名规范释,以后会在编程过程中逐步养成习惯,并延续这些习惯。

1.标识符命名法和英文缩写规范

标识符命名法和英文缩写规则是整个Android项目命名规范的基础,而灵活使用英文中的各类词性,比如:名词、动词、形容词和副词等等,都能够为程序员带来更多的可用信息,而不至于拿到一个控件或资源后猜测不出有什么用途。

1.1.标识符命名法

标识符命名法主要有四种:

其一:驼峰命名法,除首单词外,其余所有单词的第一个字母大写;

其二:帕斯卡命名法,所有单词的第一个字母大写;

其三:下划线命名法,单词与单词之间用下划线做间隔;

其四:匈牙利命名法,应用于微软编程环境中,变量取名方式:<name_scope_>+<type_prefix_>+<qualifier>分别表示范围前缀、类型前缀和变量限定词。

标识符命名法实例说明:

1.2.英文缩写

英文缩写原则:

其一:较短的单词可通过去掉“元音”形成缩写;

其二:较长的单词可取单词的头几个字母形成缩写;

其三:可以使用约定俗成的英文单词缩写。

常见英文缩写实例说明:

2.命名规范

2.1.包命名规范——Package

包名:采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为groupname(可以是公司或个人命名取的名词),三级包名根据应用程序名来取名,四级包名为模块名或层级名。比如:com.itheima.myapplicationname,表示itheima机构写的应用程序包名。

包名中涉及到的单词均使用英文名词。

包名命名规则举例:

com.xxx.xxx.activity:页面用到的Activity类,面向于用户界面层;

com.xxx.xxx.base:页面中每个Activity类共享的数据(基础共享的类);

com.xxx.xxx.adapter:页面用到的Adapter类;

com.xxx.xxx.tools/utils:公共工具方法类;

com.xxx.xxx.bean/entity/domain:元素类,抽取出的JavaBean;

com.xxx.xxx.db:数据库操作类;

com.xxx.xxx.view/ui:自定义的View类;

com.xxx.xxx.service:Service服务;

com.xxx.xxx.broadcast:Broadcast服务;

2.2.类名规范——Class

类名必须是名词,常采用帕斯卡命名规则(每个单词的首字母都必须大写),尽量避免缩写;

除非是约定俗成的名称,类名称中包含单词缩写的每个字母均应大写或者是首字母大写,例如:URL、HTML、HTTP等。

类名规范举例说明:

Activity类:WelcomeActivity、CourseActivity等;

Adapter类:NewDetailAdatper等;

公共方法类:ThreadPoolManager、LogTools等;

数据库类:NewDBHelper等;

Service类:TimeService等;

BroadcastReceiver类:TimeBroadcastReceiver等;

2.3.接口规范——Interface

接口命名规范和类规范一样采用帕斯卡命名规范,多以-able或-ible结尾(形容词或者副词),用以表示具备的一种功能,如Runnable、Accessible等。

2.4.方法规范——method

常见于动词或者动名词,采用驼峰命名法,如onCreate()等。

例如:

initXxx():初始化相关方法,使用init-作为前缀,例如:初始化布局initView();

isXxx():isXxxx()或者checkXxx()返回值为指定类型,使用is-或者check-为前缀;

getXxx():返回某种类型的值,使用get-为前缀;

processXxx():对数据进行处理,以process-为前缀;

displayXxx():弹出提示框或提示信息,以display-为前缀;

saveXxx():保存数据相关的方法,以save-为前缀;

resetXxx():对数据重置,或者是界面重置,使用reset-为前缀;

clearXxx():清除操作相关,使用clear-为前缀;

drawXxx():绘制数据或效果相关,使用draw-为前缀。

2.5.变量——variety

Android中变量的命名都采用驼峰命名规范,常见于名词。

2.5.1.普通变量命名规范

在需要表示一组变量的情况中,结尾处使用统一的量词,可以创建更加统一的变量,比如:

_First表示一组变量中的第一个;

_Last表示一组变量中的最后一个;

_Next表示一组变量中的下一个;

_Pre表示一组变量中的上一个;

_Cur表示一组变量中的当前变量;

2.5.2.控件变量命名规范

控件变量采用驼峰命名法,且类中的控件名称必须和.xml布局文件中的id保持一致;

此外,如果该变量是全局的,应该在其之前加上m,一般遵循:控件类型_功能的模式,例如:mTvVersion表示与具有Version功能的TextView控件相对应的全局变量名。

控件变量位于某个.xml文件对应的.java文件中,该Java文件的内容以及命名内容输出了详细的关于控件执行的逻辑信息,在对控件命名时只需要给出控件的类型及其功能即可,业务逻辑可以省略。

2.6.常量——CONSTANT

常量全部用大写,采用下划线命名法,常使用名词。

比如,使用符号常量值代替字面值,将有意义的信息带给程序员。

MIN_WIDTH表示最小的宽度值;

RESULT_PARSE_JSON_EXCEPTION;

RESULT_SUCCESS;

RESULT_NETWORK_EXCEPTION;

RESULT_NO_DATA;

代码中不允许出现直接硬编码的字面常量,如果是控件上显示的文本,必须放在/res/values/string.xml资源文件中;如果是代码中用到的常量字符串,必须定义成public static final String类型的常量值。

在Activit之间传递的参数,intent.putExtra(key, value)使用的key值也应该统一定义为静态常量,不能直接硬编码在代码中。

2.7.资源文件及其控件命名规范——resource&&id

资源文件主要指存放在/res目录下的文件,其命名全部采用小写,用下划线命名法。

2.7.1.Layout资源文件

Layout资源文件有多种,每种文件的命名规范均使用文件功能开头,如activity-、fragment-等。

activity资源文件:activity_description1_description2.xml;

fragment资源文件:fragment_description1_description2.xml;

drawable资源文件:controlName_description1_description2_selector.xml,其中controlName表示该资源要用在什么类型的控件上,例如:如果是按键的图片切换,则使用button_bg_sendmessage_selector.xml;selector表示该资源的形式,还比如:shape等。

颜色值的命名:color_description以color为前缀,description既可以是该颜色的功能描述,也可以是具体的颜色。例如:color_white、color_grey、color_button_pressed等。

2.7.2.控件的ID命名规范

参考模式:业务逻辑_控件类型_功能。

例如:splash_tv_version:表示该控件是使用splash业务逻辑中具有版本控制功能的TextView;user_btn_register表示该控件是使用在user业务中具有register功能的Button。

此外需要注意的是:.xml文件中的控件ID必须和.java文件中对应的控件对象名保持一致。

3.优秀资源参考——Google

Google在Android系统开发时使用的是什么命名规范?

posted @ 2017-01-23 18:15  jamesK4W  阅读(5084)  评论(0编辑  收藏  举报