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系统开发时使用的是什么命名规范?