Java开发规范_第1页
Java开发规范_第2页
Java开发规范_第3页
Java开发规范_第4页
Java开发规范_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息技术中心 IT 应用开发技术规范 Java 开发规范 编制人架构 SBU授权人 版本号 V1 0 生效日期 版本记录 版本号日 期修 改 者说 明文 件 名 V0 12013 11 15 根据开发部的开发规范整 理出初始版本 V1 02014 10 11 根据同一开发框架研发进 展以及各部门规范的更新 重新整理定稿 版权说明 本文件中包含的任何文字叙述 文档格式 插图 照片 方法 过程等内容 除另有特别注明 版权均属太平洋保险所有 未经许可任何人不得将此文件中的任何部分以任何形式进行复制 储存和传播 目录 1 概述 1 1 1 文档目的 1 1 2 适用范围 1 1 3 文档说明 1 1 4 术语定义 1 2 技术选型规范 1 2 1 开发工具指南 2 2 2 JAVA标准 2 2 3 源代码管理工具 2 2 4 依赖管理工具 2 2 5 第三方组件选型 2 3 总体技术规范 2 3 1 原则 2 3 1 1 程序对象重用原则 2 3 1 2 依赖解除原则 3 3 1 3 常量使用原则 3 3 1 4 第三方代码使用原则 3 3 1 5 自动代码检查原则 4 3 1 6 自动单元测试原则 4 3 1 7 日志处理原则 4 3 2 规范 6 3 2 1 应用分层规范 6 3 2 2 编码字符集规范 7 3 2 3 项目工程规范 7 3 2 4 代码目录结构规范 8 3 2 5 对象命名规范 9 3 2 6 代码注释规范 10 3 3 指南 12 3 3 1 java 代码指南 12 3 3 2 HTML JAVASCRIPT 代码指南 18 4 展现层技术规范 19 4 1 原则 19 4 1 1 事物一致性原则 19 4 1 2 浏览器支持原则 19 4 1 3 插件使用原则 19 4 1 4 信息提示原则 20 5 业务层技术规范 20 5 1 原则 20 5 1 1 数据访问分离原则 20 5 1 2 配置信息分离原则 20 5 2 规范 21 5 2 1 业务逻辑层设计规范 21 5 2 2 编码规范 21 5 2 3 业务规则与工作流规范 22 6 数据层开发规范 23 6 1 原则 23 6 1 1 ORM框架使用原则 23 6 1 2 复杂SQL使用原则 23 6 1 3 存储过程与触发器使用原则 24 6 1 4 数据量控制原则 24 6 1 5 绑定变量使用原则 25 6 2 规范 25 6 2 1 DAO层使用规范 25 4 1 1 DAO类注入配置规范 25 4 1 2 实体类代码实现规范 26 第 1页 共25页 1 概述 1 1 文档目的 中国太平洋保险股份有限公司 IT 应用开发技术规范 以下简称太保 IT 开发规范 定义了 IT 应用项目开发时应遵循的技术指南 作为各项目组的开发 指导性指南和代码审查的依据 本册为 Java 应用开发分册 用于规范各项目在 Java 应用的开发 1 2 适用范围 本指南适用于所有使用 Java 开发的应用项目 并且详细说明统一开发框架 的相关指南 开发过程中各方必须遵循本文档定义的原则 指南及标准 补充说明 对于统一开发框架特有指南 将在章节中进行说明 对于这些非 统一开发框架实施的项目 可不照此实施 但建议要求相关项目应该参考 并制 定自己项目的相应内容 1 3 文档说明 本指南从技术选型 总体技术规范 展现层 业务逻辑层 数据库访问层 接口开发等方面定义了应遵循的技术规范和要求 1 4 术语定义 1 原则原则 指所有应用系统的开发框架或系统设计时必须遵守的准则或限制性 条件 除非经过评审认为可以临时破例 否则是必须遵守的技术要求 2 规范规范 指应用系统开发过程中使用的某项技术应该遵循的规范 3 指南指南 指应用系统开发过程中某项技术的最佳实践 供参考和遵循 2 技术选型规范 对于技术选型标准 要求所有 Java 应用项目必须以次作为选择依据 第 2页 共25页 2 1 开发工具指南 Eclipse 3 7 及以上版本 2 2 Java 标准 项目整体采用 Java EE 5 标准 JDK 版本 Java SE 6 JDK 1 6 2 3 源代码管理工具 源代码管理工具采用SVN 由太保统一SVN Server提供SCM服务 2 4 依赖管理工具 采用 Maven3 及以上版本作为依赖管理工具 并且使用集团统一的 Nexus 版 本库 2 5 第三方组件选型 具体参见 CPIC IT 应用系统技术选型标准 3 总体技术规范 3 1 原则 3 1 1 程序对象重用原则 原则描述 原则描述 1 应用程序中占内存大的对象要避免不断生成与复制 尤其避免在循环体 中生成大对象 2 应用系统应该尽量通过公共组件与 AOP 技术 减少重复性的代码 动机说明 动机说明 公共组件是将通用的代码逻辑封装起来 避免重复实现 如事务控制 异常处理 日志记录等可以采用 AOP 技术 减少代码量 避免错误的产 第 3页 共25页 生 由于 Java 的垃圾回收机制 不会立即释放不用的内存 如果短时间内大 量生成大对象 容易造成内存溢出 3 1 2 依赖解除原则 原则描述 原则描述 应用需要支持分模块独立发布 所以一定要避免包与包之间的互相依赖 如 果一个包的类引用第二个包的类 那么第二个包的类不应引用第一个包的类 动机说明 动机说明 如果它们互相引用 它可能意味着任何一个包都不能单独使用 所有类 最好在一个包中 3 1 3 常量使用原则 原则描述 原则描述 应用程序中如果需要使用某常量值 必须在类中声明该值为常量 以增强程 序的可读性和配置性 对于配置型的常量建议使用枚举常量类定义 动机说明 动机说明 过多的常量值的直接引用不利于程序的可读性和维护 枚举常量类的使用可以避免将常量值编译到业务代码中 当常量值发生 变化的时候无需将所有引用常量的类都重新编译 只需编译常量类即可 3 1 4 第三方代码使用原则 原则描述 原则描述 应用系统必须使用附录一的组件清单中的对应版本的第三方代码包 未在清 单中的第三方代码的使用必须经过审核 判断它的稳定性 性能以及合法性 动机说明 动机说明 第三方代码可能存在不同版本 其功能 稳定性 性能等都不相同 需 第 4页 共25页 要仔细研究以确定一个最符合项目要求的版本 部分开源代码的开源协议要求都很严格 需要避免产生不合法使用的情 况 3 1 5 自动代码检查原则 原则描述 原则描述 应用程序代码必须能够通过代码检查工具 例如 CheckStyle 或 PMD 的检查 动机说明 动机说明 及时发现不符合指南的代码 避免不合格代码与程序的出现 降低开发 风险 使用说明 使用说明 通过 CheckStyle 或 PMD 等代码检查工具验证本原则 3 1 6 自动单元测试原则 原则描述 原则描述 JAVA 类中的方法必须编写单元测试代码 可以采用 Junit 等单元测试工具包 并进行自动化的单元测试 动机说明 动机说明 在程序修改后 通过运行自动化单元测试 可以及时发现本次改动是否 会影响其他代码逻辑 而版本管理人员可以通过运行单元测试 避免代 码逻辑冲突 及时发现问题 减少系统测试中出现错误的情况 使用说明 使用说明 通过 Junit 和 Jcoverage 等单元测试工具验证单元测试的结果和覆盖度 3 1 7 日志处理原则 原则描述 原则描述 开发人员对 JAVA 类进行单元测试通过之后 必须删除代码中的 第 5页 共25页 System out System err 打印语句 这些打印语句不允许随意保留在源代码中 尤其是单元测试通过后且提交到版本管理服务器中的代码不允许出现这些语句 应用的各类日志应该保存的指定的日志文件夹中 并根据应用名 文件大小 日期等分文件存放 便于统一管理 错误与异常日志应能体现异常发生的时间 原因以及发生时的环境 动机说明 动机说明 System out System err 打印占用文件句柄 在大并发量操作的时候 会对系统性能带来很大的影响 使用说明 使用说明 系统记录日志应当使用 SLF4J 的 org slf4j Logger 类 应用日志必须有一 定的分级日志机制 一般来说 所有输出内容都必须使用 Logger debug 来处理 其他的分级机制如下 ERRORERROR 可导致应用不正常工作的错误以及异常 WARNWARN 不会影响应用工作的错误或异常 INFOINFO 应用启动与停止信息与时间以及运行过程中的重要信息等 DEBUGDEBUG 各类调试信息 注意 生产环境下默认的日志级别是 WARN 级别 而采用统一开发框架的 RunningTrackRecorder 机制 INFO 及以上级别的信息将可作为异常的上下文打 印到日志文件中 因此对 INFO 级使用尤其注意 可以将一些关键信息记录下来 第 6页 共25页 3 2 规范 3 2 1 应用分层规范 应用从上到下总体分为五层 每层之间是从上到下的依赖 下层不会依赖上 层 具体每层的定位 展现层 提供用户交互界面 负责接收用户的输入信息并反馈相应的系 统处理结果 并提供页面交互逻辑 控制层 Controller 负责完成页面与后台的衔接工作 并需要处理掉 涉及到 ServletAPI 的所有相关工作 1 负责完成页面数据与后台业务数据的转化 注意 目前由于可以直接 将实体类前置到页面端 因此转化工作非常有限 2 页面数据数据基本校验 例如 是否为空 格式是否正确等 接口接入层 Interface 提供作为服务方 对外提供的接口服务 完成 第 7页 共25页 接口报文转换服务 并提供访问权限控制 接口异常处理等 服务层 Service 负责提供系统内外的服务 承担如下几项功能 1 事务控制 Service 的所有 public 方法几乎均有事务 只是有些是 子读事务 2 业务流程组装 注意 不是业务逻辑实现 一个业务流程可能仅调用 一个 Business 的一个方法 也可能调用一个 Business 的多个方法 例如 先查询 后修改 再保存 也可能出现调用多个 Business 的方法 具体 组装是按照需求进行了 3 由于 Service 可能不与 Controller 部署在一起 因此 Service 还需要对 入参对象进行基本校验 业务逻辑层 Business 此为可选层 如果不见此层 那么具体的业务 逻辑放到 Service 中 如果建立此层 那么负责完成具体的业务逻辑 主 要对应领域相关逻辑 Domain 相关设计可以参见 Domain Model 参考 Domain Driven Design 数据访问层 Data Layer 负责数据库访问 系统集成层 Integration 提供与外部系统或服务的统一集成 3 2 2 编码字符集规范 应用系统项目开发统一采用 UTF 8 编码格式标准 在 eclipse 环境中设置位置为下拉菜单 Window Preferences 选 择左边树型菜单 General Workspace 在 Text file encoding 中选 择 Other 再选择 UTF 8 3 2 3 项目工程规范 应用必须需分工程进行开发 不得将所有内容统统打包到一个工程中 Web 应用工程 存放展现层 控制层代码 对于后台服务采用 Jar 引用 第 8页 共25页 工程 Project 名以 web 结尾 服务工程 存放服务层 业务逻辑层 数据访问层的代码 工程名以 service 结尾 对外提供服务工程 对于系统需要对外提供服务 建议建立一个单独的 对外服务工程 实现接口的相关控制逻辑 对于具体的业务逻辑还是需 要引用服务工程的 Jar 系统集成工程 对于依赖外部服务较多的项目 建议建立单独的系统集 成工程 封装所有外部服务调用 3 2 4 代码目录结构规范 3 2 4 1 WebWeb 应用应用目录结构目录结构规范 前台工程命名应该全部小写 标准为 子系统名 web 前台工程的主目录结构标准如下 目录目录说明说明 src前台工程应用代码的存放目录 src main前台工程应用逻辑代码的存放目录 src test前台工程应用测试代码的存放目录 main env前台工程环境配置文件存放目录 main java前台工程应用逻辑 java 代码存放目录 main resources前台工程非环境相关配置文件存放目录 main webapp前台工程页面相关程序文件存放目录 前台工程环境配置文件存放目录标准如下 3 2 4 2 服务工程目录结构服务工程目录结构规范 后台工程命名应该全部小写 标准为 子系统名 service 后台工程的主目录结构标准如下 目录目录说明说明 src后台工程应用代码的存放目录 src main java后台工程应用逻辑代码的存放目录 src main resources后台工程环境配置文件的存放目录 src test后台工程应用测试代码存放目录 各子目录结构标准参考前台工程目录结构标准 第 9页 共25页 3 2 5 对象命名规范 对象命名应该由 26 个大小写字母 A Z a z 和 下划线 组成 不应包含 等特殊字符和数字字符 对象命名要有意义 3 2 5 1 包 包 Package 命名 命名规范 包名应该唯一 以 com 为前缀 包名的命名规范如下 com cpic 项目名 应用名 模块名 可以多层 分层名 例如 com cpic caf pub errorcode controller com cpic caf pub errorcode service 包的命名全部为小写字母 并且只允许包含字母或数字 必须以字母开 头 3 2 5 2 类 类 Class 命名命名规范 所有类名都必须是名词 以大写字母开始 必须拼写出整个单词而且附 加词的第一个字母必须为大写字母 例如 excel 文件读取类的命名为 ExcelFileReader 各层的类以各层的缩写为后缀 例如展现层的类以 Action 为后缀 接口建议与类名一致 无需特殊处理 但如需特殊标识 建议以 I 作为 前缀 后面紧跟的单词第一个字母大写 接口实现类建议以 Impl 结尾 对于抽象类建议以 Abstract 为前缀 建议 Entity VO 类直接取对象名称 后面带 EO VO 后缀 3 2 5 3 属性 属性 Attribute 命名命名规范 所有实例变量都必须以小写字母开始 每个附加单词的第一个字母必须 为大写 实例变量名也应能表明该属性指所代表的类的名称 例如 第 10页 共25页 theNameOfMyAttribute invoiceLineItem clientSearchController 尽量不要在成员变量名中包括类名 例如 不要使用 Client 类的 clientId 只使用 id 所有拥有一些集合 如 Arraylist Map 等 的属性应为复数 例如 customers parts lineItems 等 3 2 5 4 方法 方法 Method 命名命名规范 所有方法名都必须以小写字母开始 每个附加单词的第一个字母必须为 大写 方法名也应作为方法目的的描述 例如 calculateAmount addLineItem connectToServer 不要在方法名中包括类名 例如 不要使用 Client 类的 deleteClient 只使用 delete 3 2 6 代码注释规范 Java 提供了两种类型的注释 程序注释和文档注释 程序注释是由分 隔符 和 隔开的部分 文档注释 即 doc 注释 是 Java 独有 的 由分隔符 隔开 文档注释描述了 Java 类 接口 构造函数 方法和属性 每个文档注 释放在文档注释符 中 所有的类和类的接口方法必须写注释 说明 其完成功能 入口参数及返回值 程序注释有四种格式 块注释格式 单行注释 跟随注释 行尾注释 3 2 6 1 块注释格式块注释格式 块注释主要用于描述 文件 方法 数据结构和算法 一般在文件或者 方法定义的之前使用 也可以用在方法定义里面 如果块注释放在函数或者 方法定义里 它必须与它所描述的代码具有相同的缩进形式 块注释应该用一个空行开头 以便于代码部分区分开来 块注释举例 第 11页 共25页 Here is a block comment 3 2 6 2 单行注释单行注释 比较短的注释可以放在一行中 但必须与它所跟随的代码有相同的缩进 如果注释不可以放在一行 那么必须按照块注释的格式来写 单行的注释会 被解释为一空行 单行注释举例 if condition Handle the condition 3 2 6 3 跟随注释跟随注释 非常短的注释可以和它所描述的代码放在同一行 但要保证代码和注释 之间有足够的间隔一般应该大于 5 个字符应以可阅读性高 美观为标准进行 适当调整 在同一块代码中不止一个这样的注释时它们应该对齐 跟随注释举例 if a 2 return TRUE special case else return isPrime a works only for odd a 3 2 6 4 行尾注释行尾注释 注释标记 能够注释一行或者该行由 开始直到行尾的部分 行尾注释不能用在多行文本注释中 但它可以将多行代码注释掉 这三种注 释方法举例如下 if foo 1 Do a double flip else 第 12页 共25页 return false Explain why here if bar 1 Do a triple flip else return false 3 3 指南 3 3 1 java 代码指南 3 3 1 1 变量声明变量声明 1 每行定义变量数目每行定义变量数目 每行定义的变量数目必须有且只有一个 例如 int level indentation level int size size of table 如果 final 类型的成员被分配了编译时的常量 可以将它定义成 static 尽可能不使用非终态公共静态变量 因为没有机制来检测改变此变量的代码 是否有适当的权限 非终态公共静态变量允许在两个保护域间建立隐蔽通道 如 Non final static String 字段可能会把序列化好的 java 对象传给没有权限访 问它们的其他保护域 如 protected static String secularRisk 避免在操作符中赋值 如 while count input read buffer 1 2 变量初始化变量初始化 在声明局部变量的时候就要初始化变量 私有成员可以定义成 final 只能在声明或者构造函数中进行初始化 避免重新给参数分配值 完全可以使用临时的局部变量来替代 3 变量定义位置变量定义位置 第 13页 共25页 在 for 循环里的循环变量可以在 for 语句里面定义 for int i 0 i maxLoops i 注意 应避免局部变量屏蔽了外层变量的作用范围 也就是说不要在内部块 中声明一个与外部块某个变量同名的变量 例如类似下面的情况应避免 int count myMethod if condition int count 与外部的count变量重名 应该避免 避免保留未使用的局部变量 4 Boolean String 程序中不允许对 Boolean String 进行实例化 建议可以使用 Boolean TRUE 或者 Boolean valueOf true 来代替 Boolean 的实例化 5 字符串变量转换字符串变量转换 当转换原始对象成字符串类型时 避免创建不必要的临时对象 如 该方法将浪费一个对象 String foo new Integer x toString 更好的应该使用如下方法 return Integer toString x 6 Vector ArrayList 建议使用 ArrayList 来代替 Vector 可以获得更好的性能 Vector 由于使用了 synchronized 方法 线程安全 所以性能上比 ArrayList 要差 LinkedList 使用 双向链表实现存储 按序号索引数据需要进行向前或向后遍历 但是插入数 据时只需要记录本项的前后项即可 所以插入数度较快 7 Null 避免指配 NULL 值给变量 当一个变量被赋为 NULL 值时 会暗示垃圾收集 器对它进行回收 第 14页 共25页 类和接口声明类和接口声明 类和接口的声明应该遵循以下指南 1 在方法名和参数列表的圆括号以及括号后的第一个参数间都没有空格 2 开括号 必须与声明语句放在同一行 3 闭括号 必须与声明语句有相同的缩进格式 4 如果类或者接口实现内容为空 则可以将 放在 后面 5 不要在构造函数内调用可重写的方法 6 在 final 类中避免出现 protected 字段 7 抽象类应该包含抽象方法 8 方法之间要用一个空行隔开 9 在 interface 中 变量成员自动修饰为 public static final 方法自 动修饰为 abstract 类或者接口嵌套在 interface 中自动修饰为 public 和 static 10 序列化的类建议提供一个 SerialVersionUID serialVersionUID 作用 序列化时为了保持版本的兼容性 即在版本升级时反序列化仍保 持对象的唯一性 11 继承有两种 实现 implementation 与接口 interface 尽量使用接口 或者抽象类降低耦合性 即应当使用 java 接口和抽象类进行变量类型的 声明 参数类型的声明 返回类型的声明 数据类型的转换等 要保证 这一点 一个具体类应当只实现接口和抽象类中声明的方法 而不应当 给出多余的方法 3 3 1 2 eauals 方法使用指南方法使用指南 不要使用 equals 来比较 NULL 值 因为如果 xxx 是 null 的话 xxx equals null 会抛出 NullPointerException equals 比较 二者内容是否相等 比较二者是否为同一引用 即指向二者的指针是否相等 equals 是类的方法 调用它必然要引用对象 如果 xxx 的值为 null 必 然会抛异常 如果 xxx 的值不为 null 此方法返回 false 也就是说不可能返 回 true 第 15页 共25页 3 3 1 3 方法编码指南方法编码指南 1 方法代码行不要超过 100 行 方法太长 首先问题是代码复杂度较高 其次代码阅读较为困难 结果过长的方法是代码重构 通过抽取方法 提到方法的内聚性 2 避免出现过于复杂逻辑的方法 方法的复杂度是由方法内加入的判定点 Decision Point 的数量决 定的 包括如 if while for switch case 的 case 语句等 例 如 1 4 低复杂度 5 7 中等复杂度 8 10 高复杂度 10 超高复杂度 3 避免出现内容过多的方法 指南整洁的方法有利于阅读者更好的理解方法的功能 因为程序员在开 发过程中要避免过多的内容出现在一个方法中 一般来讲一个方法在 30 行代码之内为佳 如果方法的代码量超过 30 行应该考虑对方法重构 4 避免一个方法承载 传递过多的参数 在实际开发过程中 复杂的业务逻辑可能会使程序员在方法的调用的过 程中传递了过多的参数 如 public void delete String statisDate String classCode String riskCode String comCode String handler1Code String agentCode String useNatureCode String businessNature String motorcadeflag String carKindCode String useYears String insuredNature String kindCode throws Exception 遇到这样的情况要尽量将变量进行整合为对象 方法的参数一般以不超 过 5 个为佳 5 没有必要的 final 修饰 当一个类是 final 类时 它的所有方法也是自动修饰为 final 第 16页 共25页 如 public final class DDAFinalDataTool public final static String getClauseType String useNatureCode 6 重写 equals 时 建议同时重写 hashCode 或重写 hashCode 时同时重写 equals java lnag Object 中对 hashCode 的约定 在一个应用程序执行期间 如果一个对象的 equals 方法做比 较所用到的信息没有被修改的话 则对该对象调用 hashCode 方法多次 它必须始终如一地返回同一个整数 如果两个对象根据 equals Object o 方法是相等的 则调 用这两个对象中任一对象的 hashCode 方法必须产生相同的 整数结果 如果两个对象根据 equals Object o 方法是不相等的 则 调用这两个对象中任一个对象的 hashCode 方法 不要求产 生不同的整数结果 但如果能不同 则可能提高散列表的性 能 7 建议一个方法只有一个出口 8 尽量避免在方法级的同步 当 synchronized 被当做方法修饰符的时候 他所取得的 lock 将被交 给方法调用者 某对象 如果 synchronized 作用于某对象的引用 则取得的 lock 将交给该引用所指的对象 对一个对象进行同步控制意味 着 调用该方法的线程将会取得对象的 lock 持有对象 A 的 lock 的线 程 如果另外通过 synchronized 函数或者 synchronized 语句来申 请对象 A 的 lock 的线程 在该 lock 被释放前无法获得满足 9 方法中的参数 如果不会再被指配新的值 建议定义为 final 第 17页 共25页 3 3 1 4 类开发指南类开发指南 1 要避免类中声明过多的成员变量 2 不要在类中出现过多的公共方法 3 要避免内容过大的类出现 为了增强类的可读性和维护性 类的大小要 有严格的限制 一般的类应该限制在 300 行之内 包含的方法应该 10 个 之内 如果超过了这个限制开发人员应该及时和项目经理进行沟通考虑 进行重构 4 要避免遗留不使用的局部成员变量 和不使用私有变量和私有方法 5 只有静态方法的类 建议可以使用 Singleton 单态 模式来实现 使用 Singleton 的好处还在于可以节省内存 因为它限制了实例的个 数 有利于 Java 垃圾回收 6 如果指定一个类为 final 则该类所有的方法都是 final Java 编译器会寻 找机会内联 inline 所有的 final 方法 这和具体的编译器实现有关 此举能够使性能平均提高 50 7 在子类中调用父类的方法时建议使用 super getXX 8 Bean 成员应该被序列化 如果某个类能够被序列化 其子类也可以被序 列化 而声明为 static 和 transient 类型的成员数据不能被序列化 因为 static 代表类的状态 transient 代表对象的临时数据 9 换行 当一个表达式无法容纳在一行内时 可以依据如下一般规则断开 在一个逗号后面断开 在一个操作符前面断开 宁可选择较高级别 higher level 的断开 而非较低级别 lower level 的断开 新的一行应该与上一行同一级别表达式的开头处对齐 如果以上规则导致代码混乱或者代码都位于编辑器的右侧影响了美观度 那就代之以缩进 8 个空格 10 缩进 每一级缩进都要在上一级的基础上缩进 4 个字符 第 18页 共25页 3 3 2 HTML JAVASCRIPT 代码指南 1 原则上不允许在 JSP 文件中定义 js 方法 所有 js 方法需在 js 文件中定义 但 对于某些方法 其参数值或方法体中的数据需要从 request 对象中获取的 可 以将方法定义写在 jsp 页面中 2 不允许用 写中文注释 中文注释必须写在 中 例如 example xxx example xxx 3 Javascript 文件中的 TAB 键必须替换成空格 且依次缩进两个空格 4 js 文件中的函数定义必须写在一行上 不能换行 5 局部变量的速度要比全局变量的访问速度更快 因为全局变量其实是全局对 象的成员 而局部变量是放在函数的栈当中的 所以 javascript 编写的过程中 要避免大量的出现全局变量 6 我们常常要根据字符串 数组的长度进行循环 而通常这个长度是不变的 比如每次查询 a length 就要额外进行一个操作 而预先把 var len a length 则就少了查询次数 7 关于字符串的连接 如果是追加字符串 最好使用 s anotherStr 操作 而不 是要使用 s s anotherStr 4 展现层技术规范 4 1 原则 4 1 1 事物一致性原则 原则描述 原则描述 展现层不允许多次多次调用业务层的方法进行数据库的增删改操作 动机说明 动机说明 基于 Spring 的拦截式事务控制机制 目前 cpic 框架的事务统一控制在 第 19页 共25页 SERVICE 层 所以对于多次调用 SERVICE 方法进行数据库增删改的操作将被分割 成多个事务 4 1 2 浏览器支持原则浏览器支持原则 原则描述 原则描述 基于 HTML JavaScript 技术 需支持 IE8 并可在 Chrome Firefox Safari 等浏览器上运行 网页编码需采用 UTF 8 动机说明 动机说明 浏览器技术发展较快 且逐步趋向于同一的标准 需考虑各种浏览器的兼 容 UTF8 需要建议采用方式 以便处理将来的国际化 4 1 3 插件使用原则插件使用原则 原则描述 原则描述 除特殊情况不得在要求安装客户端安装 ActiveX Applet 插件 动因说明 动因说明 如需在客户机上安装软件或插件 就需要考虑该软件 插件与机器上现有 软件之间是否冲突 并要考虑将来升级的工作量 而目前的技术 可支 持采用纯 HTML JavaScript 技术实现大多数界面需求 因此如无必要 避免采用客户端软件或插件 使用说明 使用说明 可能的例外包括安全密码控件 外部设备接口控件等浏览器插件 4 1 4 信息提示原则信息提示原则 原则描述 原则描述 在用户终端屏幕显示或打印时 不得显示错误码或 Java 的异常堆栈 如需 显示 一定要显示原始错误码 并增加错误信息的显示和必要的操作提示 动因说明 动因说明 第 20页 共25页 信息提示应该考虑客户体验和提示的有效性 5 业务层技术规范 5 1 原则 5 1 1 数据访问分离原则数据访问分离原则 原则描述原则描述 业务层不得出现 SQL HQL 或其他直接访问数据库的代码 动机说明 动机说明 统一在数据访问层管理对数据库的访问 有助于提高代码的可读性与灵 活性 5 1 2 配置信息分离原则配置信息分离原则 原则描述 原则描述 1 与业务逻辑有关的阀值 参数 常量 路径等 不应写死在程序中 而 应该采用配置文件或配置数据库 其中如果业务人员需要更新的配置信 息 应该采用数据库方式 此时要注意更新所有相关应用实例的缓存 2 大多数配置文件应放在应用程序包 WAR EAR 中 随应用程序一起发布 与更新 应避免直接在文件系统中更新这类配置文件 3 如果有些配置需要在不重启应用的情况下更新并生效 如外部网关的格 式转换配置 那么应该将配置文件放在独立目录中 应用程序应能提供 重读配置到缓存的功能 动因说明 动因说明 用配置的方式保存阀值等 可以简化后期业务变化时的代码修改量 配置数据库的优点是可以写程序让维护人员用界面更新 但是配置数据 的存储形式没有配置文件灵活 很多配置文件 如 Spring Hibernate 的配置 是与程序逻辑紧密相关 的 应与程序一起发布与更新 否则可能造成不一致 尤其在集群环境 第 21页 共25页 下 配置信息一般会在应用启动时读入并缓存 因此配置更新后 需要更新 在所有应用实例的缓存 尤其在集群环境下的多个实例 5 2 规范 5 2 1 业务逻辑层设计规范业务逻辑层设计规范 1 建议每个service接口只有一个doBiz方法 该方法用于完成一个完整的业务逻 辑 2 doBiz方法是事务的 3 service中的方法返回的数据类型应该是wrapper类 传入的参数也应该是 wrapper类 4 分页查询等通用逻辑应该对具体service隐藏 不能让每个service编写者都考 虑这些东西 5 业务逻辑和工作流提交建议封装抽象基类 方便具体类的开发者 6 如果业务逻辑特别复杂 可以拆分成若干个方法或功能类 5 2 2 编码规范编码规范 1 方法在使用输入前 应检查所有参数输入的有效性 2 方法在使用输入前 应检查所有非参数输入的有效性 如数据文件 公共变 量等 3 应明确规定对接口方法参数的合法性检查是由方法的调用者还是接口方法本 身负责 缺省由方法调用者负责 4 对所调用方法的错误返回码应仔细 全面地处理 始终要对数据进行检验 绝不假设你的数据没有问题 5 如果一个方法会被多个线程调用 则需要保证该方法的线程安全性 6 对超过十行代码的方法应该分块加简短注释 如发现块注释难以描述 则可 能你的代码逻辑混乱 7 错误处理及异常处理要求 第 22页 共25页 a 只对错误采用异常处理 包括逻辑和编程错误 配置错误 数据被破坏 资源耗尽等等 b 自动服务不能因为硬件故障或资源失效等异常导致日志磁盘爆满 c 异常处理时应采用适当的日志机制来报告异常 包括异常发生的时刻 d 不要使用异常来控制程序的处理流程 5 2 3 业务规则与工作流业务规则与工作流规范规范 业务规则较为复杂且变更频繁的项目 应将业务规则与程序逻辑分离 通过 业务规则引擎 BRMS 实现业务规则的建模 过程管理与热部署 核心生产类系统使用IBM ILOG Jrules 7 1版本 太保已采购的商业软件 辅助类系统可选择使用 JBoss Drools 5 4及以上正式版本 有大量工作任务流传处理的项目 应采用工作流程引擎 BPMS 进行工作 流程的建模 流程管理 灵活变更与热部署 工作流程引擎选择M6项目扩展后的 Activiti版本 6 数据层开发规范 6 1 原则 6 1 1 ORM 框架使用原则框架使用原则 原则描述 原则描述 1 利用 ORM 技术 实现基本的增删改查 2 不允许用先删后增的方式实现修改操作 动因说明 动因说明 通过 ORM 技术实现的增删改查 可以方便对数据的访问 减少代码量 避免错误的产生 同时 ORM 框架 如 Hibernate 还支持数据缓存 减少应用服务器与数 据库的交互 提高系统处理性能 无论从系统性能 数据库一致性 还是程序可读性方面考虑 都不建议 第 23页 共25页 用先删后增代替修改操作 6 1 2 复杂复杂 SQL 使用原则使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论