java web开发规范
2设计规范
2.1系统设计规范
当有需求变化的时候,开发经理必须遵守一个顺序,第一先修改概要设计、设计设计,数据库设计等接着再修改代码的原则;
对于每一次修改,都必须编写changelog;
系统的设计文件需要放到版本控制文件当中,以便对不同的版本进行控制;
2.2数据库设计规范
数据库的设计必须放到PowerDesinger的Repository当中;
每一个项目只有系统架构师,开发经理有权限去修改物理数据模型,其他人只有只读取权;
按数据库脚本的命名规范编写数据库脚本与初始化数据脚本;
数据库的设计只能由系统架构师,开发经理或由开发经理指定的高级工程师进行修改;
需求变更需要修改到数据库的时候,必须先修改物理数据模型,再到数据库修改;
任何人没有经过系统架构师或开发经理的授权,不得私自修改数据库;
对修改内容需要修改changelog,并编写修改数据库的脚本;
修改数据库的脚本需要在测试机上做过测试,并提供项目部经理;
3文件命名规范
3.1页面文件命名规范
页面文件的命名是由小写英文字码,下划线,数字组成;user_list.html;index.jsp;index_cn.jsp;503.jsp等;
页面文件最好以英文单词组成,以便提高文件的可读性;例如:permission_list.jsp
对于一个模块的操作页面,以模块名+下划线+动词组成,例如:permission_list.jsp
对于有些模块使用英文单词命名比较麻烦的,在不得已的情况下,可以使用拼音的简写来进行命名,但是,必须在页面文件的最前面加上注释,注释以下所示:
<%--
用户列表,yflb是用户列表的简写.
@version$Date2005-7-19$
@authorgshXXXXXXXX公司/信息化应用中心/平台产品部
--%>
其中<%--的下一行或多行为页面作用描述,
@version后跟日期,以日期作为版本
@author公司帐号XXXXXXX公司/信息化应用中心/所在部门
3.2Java文件命名规范
Java类文件的命名不要超过32个字字符;
Java文件的命名规范按照Sun公司的标准进行命名;
取消Java文件以下划线进行分隔的命名方式;
取消命名当中出现的Map这些命名方式;
3.2.1Action类的命名规范
Action类是以英文单词组成;由模块名+[其它标试]+Action构成;
同一个模块的Action类CRUD操作放在同一个Action类当中;比如UserAction;GroupAction;
对于一个模块的非CRUD操作,由系统架构师或开发经理根据命名规范决定重新定义一个有意义的Action;比如:UserSearchAction;
不要在类文件当中加上下划线;
一个Action类文件不要超过500行代码;
3.2.2Service层的命名规范
Service层命名规范将由接口与实现构成;
Service层接口的命名由I+模块名+Service构成,例如:IUserService.java;
Service层实现的命名由模块名+ServiceImpl构成,例如:UserServiceImpl.java
DAO层方法的命名:以操作动词+ValueObject名
创建前缀:create,比如:createUser(Useruser);
修改前缀:update,比如:updateUser(Useruser);
删除前缀:delete,比如:deleteUser(Useruser);
列出前缀:list,比如:listUsers();
通过UUID查找实体前缀:find+实体名+ById,比如:findUserById(StringuserId);
查询:search,比如:searchUsers(MapsearchKey);
统计:count,比如:countUsers();
3.2.3DAO层的命名规范
DAO层命名规范将由接口与实现构成;
DAO层接口的命名由I+模块名+DAO构成,例如:IUserDAO;
DAO层实现的命名方式需要结构持久层的实现方式,比如,Hibernate的应用的话其命名由:模块名+DAO+Hibernate构成,例如:UserDAOHibernate;如实持久实现是由JDO方式实现,则命名由:模块名+DAO+JDO构成,例如:UserDAOJDO;
所有CRUD在接口当中都必须定义,方法体调用父对象的操作实现;
DAO层方法的命名:以操作动词+ValueObject名
创建前缀:create,比如:createUser(Useruser);
修改前缀:update,比如:updateUser(Useruser);
删除前缀:delete,比如:updateUser(Useruser);
列出前缀:list,比如:deleteUsers();
通过UUID查找实体前缀:find+实体名+ById,比如:findUserById(StringuserId);
查询:search,比如:searchUsers(MapsearchKey);
统计:count,比如:countUsers();
3.2.4Pojo类的命名规范
Pojo类的类名必须与html文件的文件名对应,比如,Pojo的类名为User,则hbm映射文件的命名为User.hbm.xml;
Pojo类的类名需要与命名规范相对应,比如,表名为ITSM_CONFIGURATION_ITEM(itsm项目的配置项表),相对应的Pojo类名应该为ConfigurationItem.java,hbm映射文件的命名为:ConfigurationItem.hbm.xml;
3.2.5Helper类的命名规范
帮助类的命名是由名词+[名词]+Helper构成;如Spring的帮助类命名为SpringHelper.java;
所有帮助类的每一个public方法,都必须加上简单的使用sample;
3.2.6Servlet类的命名规范
Servlet的命名由名词+[动词]+[名词]+Servlet构成;比如Struts的ActionServlet.java
Listener的命名由名词+[动词]+[名词]+Listener构成;比如:CommonSessionListener.java
Filter的命名由名词+[动词]+[名词]+Filter构成;比如Spring的CharacterEncodingFilter.java;
3.2.7EJB类的命名规范
Ejb的命名最终是以Bean结尾;
Ejb的接口文件存放在Ejb同级目录的interface当中;
使用Ejb必须提供相应的Xdolect脚本;
布署描述符存放在src下面;
3.2.8基础类的命名规范
基础类的命名以Base+名词+[动词]+[名词]构成;例如:BaseAction.java;BaseService;
基础数只能为abstract;或interface;
3.3JavaPackage的命名及层次结构规范
包的命名必须有意义;包名必须以com.gdcn开头;
com.gdcn.common包存放着所有各个项目所共用的文件;项目组开发人员不得修改;
项目组开发出更加通用的组件,通知部门经理或系统架构师,经开发讨论后,将新的构件加入到common包当中;
包名的命名大致如下:
com.gdcn.projectname.common存放着项目级别的通用类;
com.gdcn.projectname.web存放着与web相关的类文件;
com.gdcn.projectname.web.action存放着struts的action文件;
com.gdcn.projectname.web.taglib存放着所有的标签文件;
com.gdcn.projectname.web.servlet存放着所有的servlet;
com.gdcn.projectname.valueobject存放着所有pojo;
com.gdcn.projectname.service存放着项目所有service层的接口;
com.gdcn.projectname.service.impl存放着项目service层的所有实现;
com.gdcn.projectname.dao存放着项目dao层的所有接口;
com.gdcn.projectname.dao.impl存放着项目dao层的所有接口;
com.gdcn.projectname.webservice下面存放着webservice的实现与接口;
对于大项目,允许将com.gdcn.projectname.web.action下面再进行模块的区分;
对于大项目,允许将com.gdcn.projectname.service下面再按模块进行区分;
对于大项目,允许将com.gdcn.projectname.dao下面再按模块进行区分;
3.4导入包的顺序
在应用程序当中导入的包的顺序是做如下定义:
java
javax
org
net
com
可以使用格式化工具进行代码的格式化;
3.5自定义标签命名规范
标签的名名以前缀+下划线+后缀的方式进行命名;比如,通用标签的前缀以gdcn命名,后缀以tree命名;
项目级别的标签以项目名称+下划线+标签名称进行命名:
标签称只允许由小写英文字母+下线划+数字组成;
3.6属性配置文件的命名规范
属性配置的命名只允许小写英文字母和下划线组成;
属性配置文件只允许是property文件或者是xml文件;
属性文件存放在工程目录的etc下面
3.7数据库脚本的命名规范
建表文件以项目名称+下划线+setup构成,例如:itsm_setup.sql;
初始化脚本文件以项目名称+下划线+init构成,例如:itsm_init.sql;
修改数据脚本文件以项目名称+下划线+modify+修改时间构成,例如:itsm_modify_2006-8-19.sql构成;
数据库脚本文件必须存放到cvs或SVN当中做版本控制;
4编码规范
4.1Java类的注释规范
每一个类都必须有较为详细的注释;
注释内容包括:类文件说明、创建者、创建时间、修改者、修改时间、其它信息:比如:
/**
*<code>CommonServletContextListener</code>,该监听器的作用是在webapp启动的时候
*将ServletContext绑定到SpringHelper当中,以更加方便地获取到上下文信息.
*@authorXXX,信息化产品部-研发中心-XXXXXXX有限公司.Create-Time2006-8-111:42.
*@seeServletContextListener
*@seeSpringHelper
*/
4.2Java方法的注释规范
每一个方法都需要有注释,对于通用类提供的方法,除了有详细的注释除外,还必须有一些简单的sample;
每一个参数都必须做一下说明;
每一个返回值都必须做一下说明;
每一个异常都必须做一下说明;
/**
*parseWebSecuritySettings
*@parameleElement
*@returnWebSecuritySettings
*@throwsConfigException
*/
staticWebSecuritySettingsparseWebSecuritySettings(Elementele)throwsConfigException{
……
}
方法体里面重要的算法需要加上详细注释;
4.3Java类属性的注释规范
对于类属性必须加上注释;
通用的POJO类的属性注释必须有详细的注释;
项目级别的POJO类的属性注释由开发经理根据项目的紧急程度自己做控制;
4.4Java层次结构的规范
Jsp页面只负责页面的展现,理论上不允许任何业务逻辑代码存放在jsp文件当中;
Action层负责处理页面的请求信息,并将ActionForm转换为pojo,或将pojo转换为ActionForm;
ActionForm不能达到Service层;
Pojo不能达到Jsp层;列表对象必须在Action当中做封装;
不允许在Action层抛出ServiceException;Action层只允许抛出ParameterException异常;
业务层负责业务信息的处理,并调用业务层的对象;
业务层抛出ServiceException;
不允许在业务层操作HibernateSession;
不允许在业务层传递SQL或HQL到DAO层;
DAO层负责数据库的操作;
DAO层抛出DAOException;
4.5WEB目录存储规范
在WEB目录下面:
images存放着所有的图片文件,该目录可以按照模块,按照组件名进行细化;
<!--@page{margin:2cm}P{margin-bottom:0.21cm}H2{margin-bottom:0.21cm}H2.western{font-family:"DejaVuSerif",serif}H2.cjk{font-family:"DejaVuSans";font-style:normal}H2.ctl{font-family:"DejaVuSans"}TDP{margin-bottom:0cm}-->