当前位置:文档之家› Java项目组开发规范

Java项目组开发规范

目录第一章概述1.1 编写目的为规范FSOP项目的开发实施工作,特制定本规范。

为了提高软件开发质量,降低开发周期,增强代码的可重用性和易读性,使软件便于维护,开发人员间便于交流和协作,特总结出开发规范,以为参考。

1.2面向读者从事FSOP项目的开发、实施工作的相关人员。

1.3名词解释本节对手册中涉及到的术语进行简单描述。

第二章程序结构2.1包结构项目中的所有代码,必须符合如下的结构:1、各子系统的模块:其中subsys是子系统的名称,module是模块的名称,xxServlet和xxHandler是模块下面的Servlet 和Handler,允许有多个Servlet和Handler同时存在,建议同一个模块下,用多套Servlet和Handler处理不同的业务对象;util存放该模块专用的类;package/class可以任意级别的包或者类;2、子系统之外的模块:sm.{module}.servlet.[xxServlet]mon.util.[xxUtil]mon.hander.[xxHander]mon.sql.[xxSql]mon.entity.[xxxx]其中sm是system manage的简写,其他同上;3、公共的类:含义同上。

2.2相关类1、对于Servlet,必须继承ServletBase,必须在Servlet中处理与request和response相关的操作,一般是取参数和设置属性等操作;2、对于Handler,必须继承HandlerBase,该类的方法中,不能用request和response作为参数,更不能用Servlet作为参数;3、程序中使用到的SQL,一律在XXXSQLBuilder中进行拼写,该类属于util包,需要继承SQLBuilderBase,其构造函数为私有类型,并且要实现静态方法getSQLBuilder(conn),根据不用的数据库类型,返回不同的实例。

第三章JAVA规范3.1核心原则1.软件工程化2.面向对象3.能简单不复杂4.强调团队协作3.2 命名规范程序内的所有标识符(包括包名、类名、接口名、方法名、变量名)都应由字母、数字和下划线组成,并以字母开头;统一采用英文命名,用词应当准确,禁止使用中英文混合的方式命名,如果可能的话,尽量使用有意义的英文单词或多个单词的缩写命名(缩写应该是被广泛使用的缩写),做到见名知意;标识符的长度应当符合“min-length ? && ? max-information”原则;程序中不要出现仅靠大小写区分的相似的标识符;在使用英文字母起标识作用时要注意,尽量不使用“O”,“Z”,“I”等单个字符,以避免与数字“0”,“2”,“1”混淆。

3.2.1包、类和接口1、所有包名全部小写,只能使用英文字母,不得使用数字和其他符号;2、类名使用有意义的英文单词或单词的组合,每个单词的首字母大写,如果是实现接口的类,可酌情使用Imp结尾,英文单词一般为名词。

3、接口名使用有意义的名词和形容词的组合,每个单词的首字母大写,名称前不需要添加前缀“I”,英文字母i的大写。

3.2.2方法方法命名使用动词或“动词+名词”的组合,名称的首字母小写,名称中其他词的首字母大写。

对于取值的方法(getter method),加“get”作前缀;对于设置的方法(setter method),加“set”作前缀;对于布尔型的方法(boolean method),加“is”作前缀;用正确的反义词组命名具有互斥意义或相反动作的函数,例如getValue(),setValue()。

3.2.3变量变量命名使用名词或名词“形容词+名词”的组合,名称的首字母小写,名称中其他词的首字母大写。

尽量避免单个字符的变量名,除非是一次性的临时变量。

临时变量通常被取名为i,j,k,m 和n,它们一般用于整型;c,d,e,它们一般用于字符型。

用正确的反义词组命名具有互斥意义的变量,例如:int minValue和int maxValue。

尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。

命名应尽量使用匈牙利命名法,成员变量用长名字,参数和局部变量用短名字,一般由小写字母开头的单词组合而成。

类成员变量前一般应加上m_,静态变量应加上s_,紧接着是变量的类型(只限于JDK内置类型)。

临时变量应参照如下类似的格式书写,如ltmp ,tmpStr,tempStr等。

例如:m_nTotalNum,m_strPath,s_bRcving3.2.4常量常量(static final 变量)名字的每个字母都大写,并且指出完整含义,词与词之间用下划线分隔。

3.3 代码结构代码组织要清晰,严格控制函数的长度和每行代码的长度,{,},(,),if,else,do,while,for,case等要对应整齐,缩进全部用Tab键(4个空格)。

变量的定义要集中,函数间要有空行分开,一个程序中的空行数目最好占8%-16%。

多态函数和功能相近的函数集中放在一起。

代码应该简洁、清楚并讲述了所发生的一切,我们的目标应该是写出最清晰的代码,而不是最巧妙的代码。

有些不易理解的变量或函数应作注释,难懂的代码要有注解,在文件的开始处有该文件的用途描述。

一定要保持注释的一致性。

代码的重用要仔细,删掉从来没有用过的函数或变量,大篇幅注释掉的代码行也应删除,以免使程序混乱难读。

工程中不起作用的文件或类应删除,工程目录下的非工程文件也应该移走,保持工程的清洁,避免混淆难于管理。

3.3.1缩进代码缩进是指通过在每行代码前键入空格或制表符的方式,表示每行代码之间的层次关系。

任何编程语言都需要代码缩进规范程序的结构,采用代码缩进的编程风格有利于代码的阅读和理解。

在本项目的开发中,统一采用TAB(4个空格)进行代码缩进。

在遇到有关类、结构、函数或过程、以及枚举等等复杂程序结构的定义的时候,我们通常需要将它的内容缩进一层。

在C/C++/C#/Java 语言中,大括号是一个非常明显的标志,凡是遇到大括号,都应该直接联想到缩进。

3.3.2行宽当一条语句太长而超出一定的宽度时,应该折行书写,尽量避免一行的长度超过80 个字符。

3.3.3换行需要折行时,从第二行起到该语句结束之间的各行应该缩进一层,至下一条语句时再恢复原来的缩进位置。

这一点我相信大家都能理解并愿意遵循,然而问题的焦点并不在于要不要换行,而在于在什么位置换行。

当一个表达式不能在一行内写完,参照下面的标准换行:逗号后换行,操作符后换行,,换行时保证代码意义的连贯性。

在换行时,我们通常在一个变量或者常量之前换行,把逗号之类的分隔符、运算符留在前一行的行尾。

函数调用时,如果参数个数很多,或者要传递的表达式写起来很长,那么也会涉及到长语句换行问题;在一些必要的情况下,我们为了清晰地列出函数的每一个参数,可以每行只书写一个参数,原则是:尽可能地在参数与参数之间换行,并将逗号保留在上一行行末。

下面是经常使用的一些换行的示例代码:代码示例1:由于代码过长而进行断行bitmap = new Bitmap(size.Width, size.Height,代码示例2:对于一个超长表达式,我们可以在某两个表达式项之间断开:{??? supportsPropertyItems = true;}else{??? supportsPropertyItems = false;}原本一个很长的条件表达式,通过在“||”运算符处换行,显得更加地清晰。

有一点需要我们注意的是,当我们进行折行时,要将折行位置处的分隔符(如前一例中的逗号,这一例中的“||”运算符等)留在上一行的行末,给人以“此行并未结束”的直观印象。

代码示例1-3:寻找最佳的断行位置double containerAspectRatio =??? (double)container.ClientWidth / container.ClientHeight;如此一来,这个除法算术表达式就显得较为完整,相比前一种写法而言更能体现其内在的逻辑关系。

通常我们会选择整个表达式中最高的关系层次进行断行,例如上述代码中的“赋值号”和“除号”都是可以考虑的断行点,但相比较而言,除号连接的这个算术表达式只是整个赋值表达式的右半部分,如果在除号处断行,那么不但整个表达式会被截断,连局部的这个除法表达式也会被截断;反之,我们选择在赋值号处换行,可以保持除法表达式的完整,最大限度地减少换行对语句整体结构的破坏,能够更加清楚地表达出原来的逻辑。

代码示例1-4:将函数调用中的每一个参数都分行书写Rectangle imageBounds = new Rectangle(??? itemBounds.X + padding,??? itemBounds.Y + padding,??? itemBounds.Width - padding * 2,??? itemBounds.Height - padding * 2);当参数数量较多,参数较长或者包含表达式的时候,这种排版比起单独写成一行更为直观醒目。

3.3.4长度每个函数主要逻辑语句的长度以30个自然行以下为宜,建议不要超过50行,如果超过80行就应该重新组织。

如果{}单独成行,则其所在的行不在计算的范围内,catch/finally语句块中的语句不计算在内。

3.3.5括号在大括号语法中,缩进时大括号的写法有不同的几种,个人认为,前面所用的那种左右括号单独一行的写法最为清晰,因为可以最好地反映出括号的配对情况。

具体使用何种方式并不重要,重要的是,要保持方式风格的统一,不能在同一个项目中出现不同的风格。

风格1看起来紧凑些,可以减少代码的行数,但是在其他代码存在换行的情况下,不容易发现配对的括号,必须要借助IDE提供的功能才可以,建议使用风格2,这样的代码看起来更清晰一些,这点比较重要;3.3.6注释注释是用来解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方的,而不是注释程序是怎么工作的(How),你的程序本身就应该能说明这一问题,如果程序的逻辑过于复杂,添加一些注释也是有必要的。

例如:下面的注释是必须的:下面的注释是多余的Java 程序有两类注释:实现注释(implementation comments)和文档注释(documentcomments)。

实现注释使用/*...*/和//界定的注释。

文档注释是Java 独有的,并由/**...*/界定。

切记,注释要随着程序的修改而不断更新,一个误导的(Misleading)注释往往比没有注释更糟糕。

另外,注释(包括所有源代码)建议只用ASCII字符,不要用中文或其他特殊字符,它们会极大地影响程序的可移植性。

相关主题