1、规范
1.1 命名规范
命名对于开发人员一直是个敏感的问题,好的命名能够阅读更加容易理解,节省阅读的时间。总的命名原则是通俗易懂,让阅读者一眼就能看出该项命名具体的代表什么意思。
1.1.1 包命名规范
一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO3166标准所指定的标识国家的英文双字符代码。包名的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department),项目(project),机器(machine),或注册名(loginnames)。Uwen的所有android程序包的开头都必须是com.uwen.melo.子项目名,如全城捣蛋项目,则开头为com.uwen.melo.themonkey,以下列举在项目中常用的包命名,详细见表1.1。
包名 | 功能 | 描述 |
com.uwen.melo.子项目名.activities | activity所在的包 | 在该包下面,具体到模块则还需要增加模块的命名空间,如用户登录模块的activity对应的包名为 com.uwen.melo.项目名.activities.user |
com.uwen.melo.子项目名.adapter | 适配器所在的包 | 项目中所有的适配器都放在该包下面,具体到模块则还需要增加模块的命名空间,如用户登录模块的适配器对应的包名为 com.uwen.melo.子项目名.adapter.user |
com.uwen.melo.子项目名.cfg | 配置文件所在的包 | 项目中与配置有关的java文件应该放在此包下 |
com.uwen.melo.子项目名.common | 常量文件所在的包 | 项目中固定的参数相关的文件都应该放在此包下 |
com.uwen.melo.子项目名.http | 网络请求文件所在包 | 项目中跟网络请求相关的包应该放在此包中 |
com.uwen.melo.子项目名.media | 多媒体操作所在的包 | 项目中存在多媒体文件 |
com.uwen.melo.子项目名.model | 实体类所在的包 | 项目中所有的实体类都放在该包下面,具体到模块则还需要增加模块的命名空间,如用户登录模块的实体类对应的包名为 com.uwen.melo.子项目名.model.user |
com.uwen.melo.子项目名.util | 工具类所在的包 | 所有的工具类均放在此包中,同时工具类的命名也需要以Util结尾,如校验的工具类的名字为,ValidateUtil.java,具体的参见类名的命名规范 |
com.uwen.melo.子项目名.widget | 扩展组件所在的包 | 项目中所有扩展组件相关的文件都应该放在此包下 |
com.uwen.melo.子项目名.views | Activity中的真正的业务逻辑所在的包 | 在该包下,还需要划分如下三个功能子包。分别为 creates.impl:具体实现包名 exceptions:异常包名 interfaze:接口包名。 其中creates.impl包下还需要根据具体的模块来进行命名空间的划分,如用户模块则为creates.impl.user。 interfaze用于存放业务逻辑中回调函数和相应的接口 |
表1.1主体包命名规范表
1.1.2 类命名规范
类名是个一名词,采用大小写混合的方式,每个单词的首字母大写。尽量使你的类名简洁而富于描述。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,HTML).
在uwen的android编码规范中,类命名规范应该遵循功能名+功能类型名的命名规则,表1.2是优问android项目中常见的命名规范说明。
功能类 | 说明 |
Activtivity类 | 项目中所有的activity类文件的命名形式为 ***Activity,其中***代表的是功能名,如登录模块的activity命名为LoginActivity |
适配器类(Adapter) | 项目中所有的适配器类文件的命名形式为 ***Adapter,其中***代表的是功能名,如用户列表的适配器命名为UserAdapter |
常量类(Constant) | 项目中所有的常量类文件的命名形式为 ***Constant,其中***代表的是功能名,如常用常量的命名为CommonConstant |
配置类(Cfg) | 项目中所有的配置类文件的命名形式为 ***Cfg,其中***代表的是功能名,如服务器列表的配置类文件命名为,ServerListCfg |
工具类(Util) | 项目中所有的工具类的命名形式为 ***Util,其中***代表的是功能名,如验证工具类命名为,ValidateUtil |
接口类(Interface) | 项目中所有的接口的命名形式为 I***,其中***代表的是功能名,如注册接口的命名为,IRegister |
回调函数类(Callback) | 项目中所有的回调函数的命名形式为 ***Callback,其中***代表的是功能名,如注册功能的回调函数的命名为,RegisterCallback |
实体类(Model) | 项目中所有的实体类的命名形式为 ***VO或者是***Bean,其中***代表的是功能名,如用户信息实体类的命名为,UserVO或UserBean |
异常类(Exception | 项目中所有的异常类的命名形式为 ***Exception,如用户信息异常的命名为,UserInfoException |
线程类(Thread) | 项目中所有的线程类的命名形式为 ***Thread,如下载线程的命名为,DownloadThread |
异步线程类(AsynTask) | 项目中所有异步线程类的命名形式为 ***AsynTask,如下载异步线程的命名为,DownloadAsynTask |
表1.2 优问android项目中常见的命名规范
1.1.3 方法命名规范
方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。如run(),runFast(),getBackground();
1.1.4变量命名规范
除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
1.1.5常量命名规范
类常量和ANSI常量的声明,应该全部大写,单词间用下划线隔开。(尽量避免ANSI常量,容易引起错误)
1.2 注释规范
Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,即Javadoc注释,它是用来记录代码中的API的。注释以/**开头,并以*/结束,注释可以包含一些HTML标记符和专门的关键词。
例如:
/**
*This isan exampleof
*Javadoc
*@authordarchon
*@version0.1,08/11/2014
*/
在每个程序的最开始部分,使用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中为每个类、接口、方法、字段添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面跟更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例中的@auther和@version,这些段落将在生成文档中以特定方式显示。