【Java精品源码栏目提醒】:网学会员--在 Java精品源码编辑为广大网友搜集整理了:基于Java平台的应用系统技术架构规范(试行)_v1 - 软件工程绩等信息,祝愿广大网友取得需要的信息,参考学习。
基于
java 平台的应用系统技术架构规范 基于
Java 平台的应用系统技术架构规范(试行) 经技术专家委员会研究通过0 前言 为了降低各种项目和技术的学习和实施成本,规范技术架构和工程结构,提高代码复用率和工作效率,推广成功项目经验,特制定本规范。
本规范作为公司开发项目的一般性指导规则,公司的所有与
Java 相关的项目,在开发时均需严格依照本规范的规定执行。
对于客户有特殊强制规定的项目,则按照客户规定执行,但需报技术专家委员会备案。
1 开发工具u 开发工具内核一律采用 Eclipse3.5 及以上;u JDK 的版本为 1.5 及以上;u 代码走查工具采用 find bugs、QA Source、PMD;u 源文件管理工具采用 SVN;u 文档管理工具采用 SVN;u 所有开发工具在同一个项目组内统一版本,WorkSpace 统一路径(建议采用 Y:Workspace,可采用 subst 命令虚拟磁盘的方式实现,例如 subst Y: E:nk)。
2 架构设计规范总则2.1 J2EE 架构约束u 架构约束 可以选用以下两种架构: 1)SS I 架构:Struts2.0 以上 Spring3.0 以上 IBatis2.0 以上 2)SSH 架构:Struts2.0 以上 Spring3.0 以上 Hibernate3.3 以上 注:IBatis 现已改名为 MyBatis。
说明:架构中的所有 JAR 包统一从公司获取,项目中不允许随意更改 仅供内部使用 第1页 基于
java 平台的应用系统技术架构规范所使用 JAR 包的版本。
u 其他约束 所有文件编码一律采用 UTF8 编码格式。
2.2 架构层次 系统架构采用 3 层架构,如下图: 规则 1 展现层建议采用 Struts 标签,推荐结合 AJAX 和 JSON 增强用户体验; 规则 2 持久层使用 IBatis 或 Hibernate;事务由 Spring 进行控制; 规则 3 对处于不同容器中的功能层次,建议采用 RPC、RMI 或 Web Services等技术进行通讯。
2.3 工作空间和项目目录结构 l 工作空间:Y:/Workspace/项目名称 l 工程名称由公司或客户统一定义 l 建议采用如下项目目录结构: 仅供内部使用 第2页 基于
java 平台的应用系统技术架构规范 lt工程名称gt r sc e.otkn.工程名称gt ntnrhiglt et ts q sl anh luc ac bth eCnet Wbotn omn cmo s cs js mgs iae ae pgs al tbe rcs poes ep hl E-N WBIF lse cass i lb eore rsuc ofg cni pig srn tus srt ede ram仅供内部使用 第3页 基于
java 平台的应用系统技术架构规范u 应用包结构其中:工程名称可以是“项目名称”,或是“项目名称.子系统名称”。
u 机器人代码包gencode该包主要为产品的 dao 包、entity 包、service 包等,均由机器人自动生成,不得修改。
l dao 包主要是对应的数据库操作的 Interface,如增、删、改、查等; l entity 包主要是对应数据库表生成的实体类,包括对应数据表的 mapping 文件; l service 包主要是对应 dao 包中 Interface 的方法。
仅供内部使用 第4页 基于
java 平台的应用系统技术架构规范 注:dao、entity、service 包中的 interface 与 class 都是不可修改的。
u 应用包app应用包主要是包括 assist、service、action。
assist 包提供通用的功能,仅供 Service 中的服务使用。
该包中包含有 model、tools、enums。
l model 包中方法类为数据模型,开发人员可在此包中定义数据模型; l tools 包为工具类定义包,凡是为项目公共调用的工具类皆可定义在此包 中; l enums 包中为参数枚举类,可自定义对应参数枚举类。
service 包中包括 iface、impl、fileservice、proxy。
l iface 包中包括 table、process 包 n table 包为服务扩展类包,如原有 table Interface 中的方法不能够满足 开发人员的需求,可自定义所需 table Interface; 注:自定义 table Interface 必须继承 gencode 包中 Service 包中的相对应 Interface,且自定义 Interface 必须以 BizService 开头,如 BizServiceXXX。
n process 包中定义的类为处理服务 Interface; 仅供内部使用 第5页 基于
java 平台的应用系统技术架构规范 注:定义 Interface 时皆为 Service 开头,如:ServiceXXX。
l impl 包中包括 table、process,分别为 iface 包中相应 Interface 的实现类; l fileservice 包中为文件操作相关类。
如需定义相关文件操作类皆可在此包 中定义。
action 包中包括 table、process 包。
l table 包为以数据库表为单位的表维护操作 Action。
定义时必须以 Action 开头,如:ActionXXX; l process 包为页面请求处理 Action。
定义时必须以 Action 开头,如: ActionXXX。
ext 包是 gencode 包的扩展包,在性能要求极高或需要实现复杂的关联查询的时候才允许自定义 dao 或 model,存放在 ext 包里。
对于常规的关联查询,仍建议采用建立试图的方法,用代码生成器自动生成程序到 gencode 包里。
u 配置文件包resource 包中包括 config、spring、struts 包。
l config 包中主要是日志配置文件,上传文件地址配置文件,数据库连接 配置文件,国际化文件等。
l spring 包中主要为 spring 相关的配置文件。
l struts 包中主要为 struts 相关的配置文件。
2.4 数据库设计规范 数据库设计除了遵循一般意义的范式外,为了便于代码生成,应遵循以下规 仅供内部使用 第6页 基于
java 平台的应用系统技术架构规范范: 1 需要一个逻辑主键,名称为 ID(ID 无业务意义),一方面可以方便业务和显示层的操作,另一方面对数据库的访问效率会有较大程度的提高。
2 表字段的注释可以作为页面字段名称,为用户在后期页面开发中减少工作量,而且有利于代码的阅读。
3 字段的长度及精度最好有明确的定义,因为数据库的类型和
java 的没有完全的对应关系,比方在 oracle 中的 numeric 类型,在生成工具中会按照他的长度和精度对应不同
java 类型,为了避免出错,这些属性最好明确设定。
4 表及字段名称最好用大写字母,单词之间用下划线分隔,表对应的类名是依据表的名称来组合的,所以必须遵循此规范。
5 强烈建议不使用 lob 等类型的大对象字段。
6 建议每个实体表都有 CODE、NAME 字段。
2.5 包、类及方法命名规范 标示符类型 命名约定 例子包 l 全部小写 net.northking.bpoweb. l 类的名字应该使用名词。
Class Hello l 每个单词第一个字母应该大写。
类,接口 Class HelloWorld l 避免使用单词的缩写,除非它的缩写已经 Interface Apple 广为人知,如 HTTP。
l 第一个单词一般是动词。
l 第一个字母是小写,但是中间单词的第一 个字母是大写。
getName l 如果方法返回一个成员变量的值,方法名方法 setName 如若返回的值是 bool 一般为 get成员变量名, isFirst 变量,一般以 is 作为前缀。
l 如果方法修改一个成员变量的值,方法名 一般为:set 成员变量名。
仅供内部使用 第7页 基于
java 平台的应用系统技术架构规范 l 第一个字母小写,中间单词的第一个字母 大写。
String myName l 不要用_或amp作为第一个字母。
int students l 尽量使用短而且具有意义的单词。
变量 int i l 单字符的变量名一般只用于生命期非常短 int n 暂的变量。
ijkmn 一般用于整型;cde 一般 char c 用于字符类型。
l 如果变量是集合,则变量名应用复数。
常量 l 所有常量名均全部大写,单词间以‘_’ int MAX_NUM 隔开。
2.6 html/jsp 层编码规范 页面部分属于框架的表现层,代码生成工具默认生成针对数据库表增加、删除、查询、修改的页面。
这些页面可以作为参考开发使用也可以优化完善后直接使用。
在标签中使用 classstyle 属性,在 css 文件中指定对应的 css 样式,可以控制显示效果。
对于通用产品尽可能做到修改 css 适应不同客户的风格需求。
3 展现层3.1 展现层介绍 展现层由 Web 页面和相应的 Action 构成,用户通过 Web 页面与系统进行交互,Action 用来接收页面请求。
Action 通过 XxxProxyFactory 获得 XxxService 的代理 XxxProxy,并通过 XxxProxy 调用后台服务 XxxService,然后把执行结果返回页面。
3.2 Action 与 ProxyFactory 设计规范 l Action 不能直接访问 Service,而是通过 ProxyFactory 获得 ServiceXxx 接口调用。
l 如果 web 服务器和数据库服务器没有物理隔离,那么 XxxProxyFactory 的 getService 方法可以直接返回 XxxServiceImpl。
如果 web 服务器不能 直接访问数据库服务器,那么 XxxProxyFactory 的 getService 方法应该 返回 XxxProxy 的实例。
XxxProxy 可以是实现了 XxxService 接口的 仅供内部使用 第8页 基于
java 平台的应用系统技术架构规范 rmi/web service 客户端。
4 业务逻辑层4.1 业务逻辑层介绍 业务逻辑层包含业务逻辑接口和实现。
本层主要编写相应的业务逻辑,开发人员在本层增加业务逻辑处理代码,已有的代码只是对本表的增、删、改、查,在编写代码时可以调用其他 dao 中的方法,取对应的数据。
4.2 业务逻辑层设计规范 l 建议每个 service 接口只有一个 doBiz 方法,该方法用于完成一个完整 的业务逻辑。
l doBiz 方法是事务的。
l service 中的方法返回的数据类型应该是 wrapper 类,传入的参数也应该 是 wrapper 类。
l 分页查询等通用逻辑应该对具体 service 隐藏,不能让每个 service 编写 者都考虑这些东西。
l 业务逻辑和工作流提交建议封装抽象基类,方便具体类的开发者。
l 如果业务逻辑特别复杂,可以拆分若干个方法或功能类。
4.3 Service 层方法编码规范 l 检查所有参数输入的有效性; l 检查所有非参数输入的有效性,如数据文件、公共变量等; 说明:方法的输入主要有两种:一种是参数输入;另一种是全局变量、 数据文件的输入,即非参数输入。
方法在使用输入之前,应进行必要的 检查。
l 在同一项目组应明确规定对接口方法参数的合法性检查应由方法的调 用者负责,还是由接口方法本身负责,缺省是由方法调用者负责 l 对所调用方法的错误返回码要仔细、全面地处理; 始终要对数据进行检验,决不要假设你的数据没有问题。
l 如果一个方法会被多个线程调用,则需要保证该方法的线程安全性; l 超过十行代码的方法应该分块加简短注释; 仅供内部使用 第9页 基于
java 平台的应用系统技术架构规范 如果发现块注释很难描述,则可能你的代码逻辑混乱。
l 错误处理和异常处理。
通常的思想是只对错误采用异常处理:逻辑和编程错误,设置错误, 被破坏的数据,资源耗尽等等。
自动服务不能因为硬件故障或者资源失效等异常导致日志磁盘爆 满。
异常处理时可以采用适当的日志机制来报告异常,包括异常发生的 时刻。
不要使用异常来控制程序的处理流程。
5 DAO 层5.1 DAO 层介绍 DAO 层指的是数据访问对象,由 service 层调用,是业务逻辑和数据库之间的桥梁。
5.2 DAO 层主要功能 DAO 层属于数据持久层。
DAO 层主要进行的是针对一个数据库表的 CRUD增删查改操作。
每一个 DAO 类提供的功能包括: 1. findAll 取得表中所有记录 2. findByCriteriaDetachedCriteria detachedCriteria 根据 DetachedCriteria 取得记录 3. findByCriteriaDetachedCriteria detachedCriteriaint firstint max 根据 DetachedCriteria 取得以规定索引开始的一定数量的记录 4. findNumByCriteriaDetachedCriteria detachedCriteria 获得以传入的 DetachedCriteria 为筛选条件的记录数 5. findByExampleCountries instance 根据传入的 POJO 实例属性,查找匹配的记录;如果传入的 POJO 实例 某个属性为空,表示该属性的所有记录都符合过滤条件。
6. findById
java.lang.String id 仅供内部使用 0 第1页 基于
java 平台的应用系统技术架构规范 根据传入的 id 查找记录 7. findByPropertyfinal String propertyNamefinal Object value 根据传入的属性名和对应值,查找匹配记录。
8. findBySqlfinal String sql 根据传入的 sql 语句查找匹配记录。
本方法只支持读数据库的 sql 语句。
9. saveCountries transientInstance 执行插入操作,将传入的 pojo 实例转化成数据库记录插入数据库表中。
10. updateCountries instance 执行更新操作,将传入的 pojo 实例更新到数据库,按照 id 进行更新。
11. deleteCountries persistentInstance 执行删除操作,将传入的 pojo 实例,按照 id 删除其数据库中相同 id 的 记录。
5.3 DAO 层使用规范 对 1. DAO 层是直接操作数据库的, DAO 的调用,只能通过 Service 进行。
2. 框架默认生成的代码中,一个数据库表对应生成一个 DAO。
用户在开 发的时候,会有多表操作的需求,这种多表操作可以在 Service 中引入 一个需求数据库表的 DAO 类型变量。
这样就可以在本 service 中对新的 表进行操作。
3. DAO 层扩展方式:DAO 基本提供了对单张数据库表的完整操作。
应用 开发中,DAO 层一般不需要进行扩展。
如果 DAO 提供的功能不足以 满足需求,应该由框架维护人员进行扩展。
应用开发人员不能扩展 DAO 类; 4. 如果需要对多个表进行关联查询,则可以根据需要增加相应的类和配置 文件,但不允许修改框架自动产生的代码。
6 安全规范6.1 会话安全 l 限制会话闲置时间 为了防止用户忘记注销,应当限制会话闲置时间,一般不要超过 30 分钟。
仅供内部使用 1 第1页 基于
java 平台的应用系统技术架构规范 l 限制会话生命周期 为了防止会话劫持,我们应当强制限制一个会话的生命周期,一般不要 超 8 个小时。
生命周期结束后应当重新进行验证。
l 允许用户自行注销会话 应当允许用户安全的结束自己的会话。
l 会话结束后清除数据 一个会话结束后,应该安全的从硬盘和内存中清除相关数据。
6.2 密码策略 l 验证用户设置的密码强度 如:验证密码长度、是否包含数字、字符、特殊符号等 l 允许用户更改自己的密码 l 使用一种密码过期策略 l 密码找回应通过其他途径通知 l
源码中不出现密码 l 密码加密存.
上一篇:
程序员的十个等级
下一篇:
bc80e7a0-d1f2-4595-b21d-01a76798e87a