项目编码规范.doc
《项目编码规范.doc》由会员分享,可在线阅读,更多相关《项目编码规范.doc(19页珍藏版)》请在冰豆网上搜索。
项目编码规范应用研发中心
项目代码编程规范
1.应用范围
本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)JS代码、HTML代码及数据库设计均应遵守这个规范。
同时,也可作为其它项目的参考。
2.设计类和方法
2.1.创建具有很强内聚力的类
方法的重要性往往比类的重要性更容易理解,方法是指执行一个独立逻辑的一段代码。
类常被错误的视为是一个仅仅用于存放方法的容器。
有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有方法放入单个类之中。
之所以不能正确的认识类的功能,原因之一是类的实现实际上并不影响程序的执行。
当一个工程被编译时,如果所有方法都放在单个类中或者放在几十个类中,这没有任何关系。
虽然类的数量对代码的执行并无太大的影响,但是当创建便于调试和维护的代码时,类的数量有时会带来很大的影响。
类应该用来将相关的方法组织在一起。
当类包含一组紧密关联的方法时,该类可以说具有强大的内聚力。
当类包含许多互不相关的方法时,该类便具有较弱的内聚力。
应该努力创建内聚力比较强的类。
大多数工程都包含许多并不十分适合与其他方法组合在一起的方法。
在这种情况下,可以为这些不合群的方法创建一个综合性收容类。
创建类时,应知道“模块化”这个术语的含义是什么。
类的基本目的是创建相当独立的程序单元。
2.2.创建松散连接和高度专用的方法
2.2.1.使所有方法都执行专门的任务
每个方法都应执行一项特定的任务,它应出色的完成这项任务。
应避免创建执行许多不同任务的方法。
创建专用方法有许多好处。
首先调试将变得更加容易。
2.2.2.尽量使方法成为自成一体的独立方法
当一个方法依赖于其他方法的调用时,称为与其他方法紧密连接的方法。
紧密连接的方法会使调试和修改变得比较困难,因为它牵涉到更多的因素。
松散连接的方法优于紧密连接的方法,但你不可能使每个方法都成为独立的方法。
若要使方法具备较强的独立性,方法之一是尽量减少类变量。
创建方法时,设法将每个方法视为一个黑箱,其他例程不应要求了解该方法的内部工作情况,该方法也不应要求了解它外面的工程情况。
这就是为什么你的方法应依靠参数而不应依靠全局变量的原因。
创建专用方法时,请考虑下列指导原则:
1)将复杂进程放入专用方法。
如果应用程序使用复杂的数学公式,请考虑将每个公式放入它自己的方法中。
这样使用这些公式的其他方法就不包含用于该公式的实际代码。
这样也可以更容易发现与公式相关的问题。
2)将数据输入/输出(I/O)放入专用方法。
3)将专用方法中可能要修改的代码隔离。
如果你知道某个进程经常变更,请将这个多变的代码放入专用方法,以便以后可以更容易的进行修改,并减少无意中给其他进程带来问题的可能性。
4)将业务规则封装在专用方法中。
业务规则常属于要修改的代码类别,应与应用程序的其余部分隔开。
其他方法不应知道业务规则,只有要调用的方法才使用这些规则。
2.3.设计类和方法时,要达到下列目的:
1)创建更加容易调试和维护的方法
2)创建具有强大内聚力的类
3)创建高度专用的方法
4)创建松散连接的方法
5)尽量使方法具有独立性
6)提高方法的扇入性
7)降低方法的扇出性
2.4.编程原则
2.4.1.为方法和类赋予表义性强的名字
为了使代码更加容易理解,最容易的方法之一是为你的方法赋予表义性强的名字。
函数名DoIt、GetIt的可读性很难与CalculateSalesTax、RetrieveUserID相比。
由缩写方法名组成的代码很难理解和维护,没有理由再这样做了。
给方法正确的命名,可使程序工程的调试和维护工作大大的改观。
请认真对待方法命名的工作,不要为了减少键入操作量而降低方法的可理解度。
实际应用举例:
1)给方法命名时应大小写字母混合使用。
如果句子全使用大写字母,那么阅读起来就非常困难,而大小写字母混合使用的句子,阅读起来就很容易。
2)定义方法名时不要使用缩写。
如果你认为应用程序中的某些工程应使用缩写,那么请将这些情况加上注释,并确保每个人在所有时间内都使用这些缩写。
决不要在某些方法中对某些单词进行缩写,而在别的方法中却不使用缩写。
3)定义方法名要统一使用英文单词或者计算机专业英语,要做到见名知意。
2.4.2.创建方法时,始终都应显式地定义它的作用域。
1)如果你真的想创建一个公用方法,请向代码阅读者说明这一点。
2)通过为每个方法赋予一个明确定义的作用域,可以减少代码阅读者需要投入的工作量。
应确保你为方法赋予最有意义的作用域。
如果一个方法只被同一类中的另一个方法调用,那么请将它创建成私有方法。
如果该方法是从多个类中的多个方法中调用,请将该说明为公用方法。
2.4.3.用参数在方法之间传递数据
应尽量避免使用类变量。
一般来说,变量的作用域越小越好。
为了减少类变量,方法之一是将数据作为参数在不同方法之间传递,而不是让方法共享类变量。
1)为每个参数指定数据类型。
2)始终要对数进行检验,决不要假设你得数据没有问题。
程序员常犯的一个错误是在编写方法时假设数据没有问题。
在初始编程阶段,当编写调用方法时,这样的假设并无大碍。
这时你完全能够知道什么是参数的许可值,并按要求提供这些值。
但如果你不对参数的数据进行检验,那么下列情况就会给你带来很大麻烦:
另外某个人创建了一个调用方法,但此人不知道允许的值;你在晚些时候添加了新的调用方法,并错误的传递了坏数据。
2.4.4.其他编程建议
1.注意释放资源,如文件关闭,数据库操作后关闭ResultSet,Statement,Connection等,其他涉及IO操作的如:
各种Reader,Writer,InputStream,OutputStream等等。
2.使用StringBuffer对象
在处理String的时候要尽量使用StringBuffer类,StringBuffer类是构成String类的基础。
String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。
当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。
比如:
如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer对象和它的append()方法。
如果我们用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。
3.避免太多的使用synchronized关键字
避免不必要的使用关键字synchronized,应该在必要的时候再使用它,这是一个避免死锁的好方法。
必须使用时,也尽量控制范围,最好在块级控制。
4.避免使用java.util.Vector等那些在jdk1.3前就有的集合类
因为"Unlikethenewcollectionimplementations,Vectorissynchronized.",所以使用java.util.Vector类在性能上会有所减低。
5.尽量使用接口而不是一个具体的类
比方如下需求,给定一个SQL语句,返回一个对象的列表,实现中用java.util.ArrayList实现,于是定义方法为:
publicjava.util.ArrayListgetObjectItems(Stringsql)
上面的方法存在一个问题,当getObjectItems内改用Vector或LinkedList实现,外部类必须做相应更改。
一个更好的方法是定义返回值为java.util.AbstractList更合适:
publicjava.util.AbstractListgetObjectItems(Stringsql)
这样即使更改实现,外部类也不必做相应更改。
6.避免使用索引来调用数据库中间层组件返回的结果集
如:
for(inti=1;i<=dt.getRowCount();i++)
{Stringfield1=dt.getField(i,0).toString();……}
而应用字段名来存取结果集:
for(inti=1;i<=dt.getRowCount();i++)
{Stringfield1=dt.getField(i,"field1").toString();……}
这样在数据库设计更改或查询的SQL语句发生变化时,不会影响到程序的执行。
3.命名约定
所有变量的定义应该遵循匈牙利命名法,由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。
3.1.工程的命名
3.1.1.工程的命名
直接使用projectname.
3.1.2.工程目录的分配(参照各类开发工具的设置)
1.设计文档(design):
design
2.源代码(source):
src.
3.引用的库文件(library):
lib
4.生成的代码(class):
classes
5.生成的文档(document):
docs
3.2.包
3.2.1.约定
l根级目录以com.**开头!
l各项目名称为下一级包!
本级目录为项目的控制类所在(即:
实现主要流程的类和涉及项目系统管理的类)。
l再下级的主要并列目录名:
1)Cloudframework云存储开发框架包
2)Cngi具体的应用系统名
l全部小写
l使用英语单词,不要使用汉语拼音
l标识符用点号分隔开来
3.2.2.举例
3.3.类,接口
3.3.1.约定
l类的名字应该使用名词
l使用英语单词,不要使用汉语拼音
l每个单词首字母应该大写
l避免使用单词的缩写,除非它的缩写已经广为人知,如HTTP
l实现类一般采用接口类名+Impl来展现
3.3.2.举例
ClassHello;
ClassHelloWorld;
InterfaceApple;
ClassAppleImplimplementsApple;
3.4.方法
3.4.1.约定
l第一个单词一般是动词。
l使用英语单词,不要使用汉语拼音
l第一个单词是小写,但是中间单词的首字母是大写。
l如果方法返回一个成员变量的值,方法名一般为get+成员变量名,如若返回的值是bool变量,一般以is作为前缀。
l如果方法修改一个成员变量的值,方法名一般为:
set+成员变量名。
3.4.2.举例
getName();
setName();
isFirst();
3.5.变量
3.5.1.约定
l单词的首字母大写;但是首个单词字母都必须小写
l使用英语单词,不要使用汉语拼音
l不要用_或&作为第一个字母。
l尽量使用短而且具有意义的单词。
l单字符的变量名一般只用于生命期非常短暂的变量。
i,j,k,m,n一般用于int/integers;c,d,e一般用于characters。
l如果变量是集合,则变量名应用复数。
lboolean/Boolean类型的使用is前缀
l命名组件采用匈牙利命名法。
3.5.2.举例
StringfileName;
int[]students;
inti;
intn;
booleanisPass;
3.6.常量