首页 基于Java平台的应用系统技术架构规范(试行)_v1

基于Java平台的应用系统技术架构规范(试行)_v1

举报
开通vip

基于Java平台的应用系统技术架构规范(试行)_v1 基于 java平台的应用系统技术架构规范 仅供内部使用 第1页 基于 Java平台的应用系统技术架构规范(试行) 经技术专家委员会研究通过 0 前言 为了降低各种项目和技术的学习和实施成本,规范技术架构和工程结构,提 高代码复用率和工作效率,推广成功项目经验,特制定本规范。 本规范作为公司开发项目的一般性指导规则,公司的所有与 Java 相关的项 目,在开发时均需严格依照本...

基于Java平台的应用系统技术架构规范(试行)_v1
基于 java平台的应用系统技术架构 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 仅供内部使用 第1页 基于 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包统一从公司获取,项目中不允许随意更改 基于 java平台的应用系统技术架构规范 仅供内部使用 第2页 所使用 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 建议采用如下项目目录结构: 基于 java平台的应用系统技术架构规范 仅供内部使用 第3页 src sql WebContent resource readme net.northking.<工程名称> test launch batch common pages WEB-INF config spring struts css js images table process help classes lib <工程名称> 基于 java平台的应用系统技术架构规范 仅供内部使用 第4页 u 应用包结构 其中:工程名称可以是“项目名称”,或是“项目名称.子系统名称”。 u 机器人代码包(gencode) 该包主要为产品的 dao包、entity包、service包等,均由机器人自动生成,不得 修改。 l dao包主要是对应的数据库操作的 Interface,如增、删、改、查等; l entity包主要是对应数据库 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 生成的实体类,包括对应数据表的 mapping 文件; l service包主要是对应 dao包中 Interface的方法。 基于 java平台的应用系统技术架构规范 仅供内部使用 第5页 注: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; 基于 java平台的应用系统技术架构规范 仅供内部使用 第6页 注:定义 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 数据库设计规范 数据库设计除了遵循一般意义的范式外,为了便于代码生成,应遵循以下规 基于 java平台的应用系统技术架构规范 仅供内部使用 第7页 范: 1) 需要一个逻辑主键,名称为 ID(ID无业务意义),一方面可以方便业务 和显示层的操作,另一方面对数据库的访问效率会有较大程度的提高。 2) 表字段的注释可以作为页面字段名称,为用户在后期页面开发中减少工 作量,而且有利于代码的阅读。 3) 字段的长度及精度最好有明确的定义,因为数据库的类型和 java的没有 完全的对应关系,比方在 oracle中的 numeric类型,在生成工具中会按照他的长 度和精度对应不同 java类型,为了避免出错,这些属性最好明确设定。 4) 表及字段名称最好用大写字母,单词之间用下划线分隔,表对应的类名 是依据表的名称来组合的,所以必须遵循此规范。 5) 强烈建议不使用 lob等类型的大对象字段。 6) 建议每个实体表都有 CODE、NAME字段。 2.5 包、类及方法命名规范 标示符类型 命名约定 例子 包 l 全部小写 net.northking.bpoweb. 类,接口 l 类的名字应该使用名词。 l 每个单词第一个字母应该大写。 l 避免使用单词的缩写,除非它的缩写已经 广为人知,如 HTTP。 Class Hello ; Class HelloWorld ; Interface Apple ; 方法 l 第一个单词一般是动词。 l 第一个字母是小写,但是中间单词的第一 个字母是大写。 l 如果方法返回一个成员变量的值,方法名 一般为 get+成员变量名,如若返回的值是 bool 变量,一般以 is作为前缀。 l 如果方法修改一个成员变量的值,方法名 一般为:set + 成员变量名。 getName(); setName(); isFirst(); 基于 java平台的应用系统技术架构规范 仅供内部使用 第8页 变量 l 第一个字母小写,中间单词的第一个字母 大写。 l 不要用_或&作为第一个字母。 l 尽量使用短而且具有意义的单词。 l 单字符的变量名一般只用于生命期非常短 暂的变量。i,j,k,m,n一般用于整型;c,d,e一般 用于字符类型。 l 如果变量是集合,则变量名应用复数。 String myName; int[] students; int i; int n; char c; 常量 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 接口的 基于 java平台的应用系统技术架构规范 仅供内部使用 第9页 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 超过十行代码的方法应该分块加简短注释; 基于 java平台的应用系统技术架构规范 仅供内部使用 第10页 如果发现块注释很难描述,则可能你的代码逻辑混乱。 l 错误处理和异常处理。 通常的思想是只对错误采用异常处理:逻辑和编程错误,设置错误, 被破坏的数据,资源耗尽等等。 自动服务不能因为硬件故障或者资源失效等异常导致日志磁盘爆 满。 异常处理时可以采用适当的日志机制来 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 异常,包括异常发生的 时刻。 不要使用异常来控制程序的处理 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 。 5 DAO层 5.1 DAO层介绍 DAO层指的是数据访问对象,由 service层调用,是业务逻辑和数据库之间 的桥梁。 5.2 DAO层主要功能 DAO 层属于数据持久层。DAO 层主要进行的是针对一个数据库表的 CRUD(增删查改)操作。每一个 DAO类提供的功能包括: 1. findAll() 取得表中所有记录 2. findByCriteria(DetachedCriteria detachedCriteria) 根据 DetachedCriteria取得记录 3. findByCriteria(DetachedCriteria detachedCriteria,int first,int max) 根据 DetachedCriteria取得以规定索引开始的一定数量的记录 4. findNumByCriteria(DetachedCriteria detachedCriteria) 获得以传入的 DetachedCriteria为筛选条件的记录数 5. findByExample(Countries instance) 根据传入的 POJO 实例属性,查找匹配的记录;如果传入的 POJO 实例 某个属性为空,表示该属性的所有记录都符合过滤条件。 6. findById( java.lang.String id) 基于 java平台的应用系统技术架构规范 仅供内部使用 第11页 根据传入的 id查找记录 7. findByProperty(final String propertyName,final Object value) 根据传入的属性名和对应值,查找匹配记录。 8. findBySql(final String sql) 根据传入的 sql语句查找匹配记录。本方法只支持读数据库的 sql语句。 9. save(Countries transientInstance) 执行插入操作,将传入的 pojo实例转化成数据库记录插入数据库表中。 10. update(Countries instance) 执行更新操作,将传入的 pojo实例更新到数据库,按照 id进行更新。 11. delete(Countries 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分钟。 基于 java平台的应用系统技术架构规范 仅供内部使用 第12页 l 限制会话生命周期 为了防止会话劫持,我们应当强制限制一个会话的生命周期,一般不要 超 8个小时。生命周期结束后应当重新进行验证。 l 允许用户自行注销会话 应当允许用户安全的结束自己的会话。 l 会话结束后清除数据 一个会话结束后,应该安全的从硬盘和内存中清除相关数据。 6.2 密码策略 l 验证用户设置的密码强度 如:验证密码长度、是否包含数字、字符、特殊符号等 l 允许用户更改自己的密码 l 使用一种密码过期策略 l 密码找回应通过其他途径通知 l 源码中不出现密码 l 密码加密存储 6.3 访问策略 l 基于角色的访问控制 l 集中式访问控制 建立一个集中的访问控制系统 l 对关键操作进行二次认证 为了防止会话劫持,需要对关键操作进行再次的认证。例如:修改口令 等。 l 细粒度的访问控制 6.4 输入验证 l 集中式输入验证 所有输入采用一致的验证方式和策略。 l 服务器端输入验证 所有来自 web浏览器的数据都能被修改为任意内容,因此必须在服务器 基于 java平台的应用系统技术架构规范 仅供内部使用 第13页 端进行适当的输入验证,以避免验证被绕过。 l 建议采用白名单放弃黑名单 白名单包含允许内容的模式,黑名单包含不允许内容的模式。使用白名 单法更容易,也推荐使用此方法。 l 验证输入长度、格式、字符合法性等 验证时应验证允许输入的最大和最小长度,数字的最大和最小值,允许 输入的字符范围和数据类型等。 l 验证所有的输入 建议对用户的所有输入进行验证,避免有遗漏的或未经验证的数据被输 入。 6.5 数据库连接安全 l 使用参数化 SQL语句 正确的使用参数化的 SQL 语句,就可以通过不允许数据指向改变的方 法来防御几乎所有的 SQL注入攻击。参数化的 SQL语句通常是由 SQL字符 构造的,但是来自客户的数据是需要与一些绑定参数组合在一起的。也就是 说,开发者使用这些绑定参数来准确的向数据库指出哪些应该被当作数据那 些应该被当作命令。当程序要执行该语句的时候,它就会告知数据库这些绑 定参数的运行值,这样的操作避免了数据被认为是命令语句而被执行的错 误。 l 确保数据库资源能够被释放 由于资源泄露可能导致系统出现很难捕捉到的错误,所以应当建立一个 资源管理模块并且完全按照规则进行操作。千万不要依赖 Java 和.NET 的 垃圾回收器来回收资源。垃圾回收器在进行回收之前还要检测对象是否适合 进行垃圾回收。除非虚拟机的内存己经很低,才会进行垃圾回收,这样无法 保证即将被回收的对象是处于正常的状态。 6.6 文件操作安全 l 严格控制文件上传 文件上传向来是 web 应用系统最具威胁的安全风险点之一,因此应当严格 基于 java平台的应用系统技术架构规范 仅供内部使用 第14页 控制。 n 文件类型验证 检验上传文件的后缀名,设定允许上传文件类型白名单。 n 存储路径安全 避免允许用户设定或选择存储路径和保存的文件名,严格检测提交数据 中是否含有中断符。 l 严格分配文件访问权限策略 使用最严格的访问权限策略来保护上传或新建的文件和目录。 l 安全的临时文件 为了安全的使用临时文件,应该在程序初始化时创建一个只能被该程序 读写的文件夹。不要将该文件夹放在用户可访问到的地方,并将所有的临时 文件都放在其中。 7 日志规范 日志记录使用 log4j 规范 是否必须遵循 范例 在正式提交的代码中,不允许使用 Console输出方式显示日志信息 必须 日志文件名采用<系统英文缩写>.log 的 命名规则。文件大小限制为最多 20Mb, 即当日志文件超过 20Mb时,旧日志文件 重命名为<系统名称>.log.n (n从 1开始编 号以步长 1 递增),新日志写入<系统名 称>.log 必须 日志的输出格式(不包括异常树信息): 日期(yyyy-M-d) 时间(HH:mm:ss) [日志 级别](对应程序文件名:行号)定制信息 必须 对于“敏感”信息(如客户密码),禁止 使用 debug以上级别的日志记录 必须 把时间戳包含在日志文件内,时间戳可以 必须 基于 java平台的应用系统技术架构规范 仅供内部使用 第15页 形成一条清晰的事件时间线。 确保在某种重要行为发生时有相应的记 录。其中重要行为主要包括:管理指令、 网络通信、身份认证尝试、更改对象所有 权等。 必须 采取有效策略阻止攻击者获得系统的重 要信息或对日志文件进行恶意修改。 必须 日志应区分如下几类情形: l 发生致命错误时运行将终止(fatal) l 发生错误 仍可继续执行(error) l 发生警告仍可继续执行(warn) l 记录运行过程或干预情况(info) l 调试程序记录信息等(debug) 必须 基于 java平台的应用系统技术架构规范 仅供内部使用 第16页 8 规范执行 制度 关于办公室下班关闭电源制度矿山事故隐患举报和奖励制度制度下载人事管理制度doc盘点制度下载 8.1 参与者与用例图 8.2 制定 本规范由技术管理部负责起草,然后交由专家委员会扩大会议审批; 专家委员会扩大会议出席人员:专家委员会成员以及研发中心资深程序员及 以上人员。 8.3 修改 公司任何人员可以对规范提交修改意见,经专家委员会和研发中心总经理以 上人员批准即可生效。 8.4 培训 新入职开发人员必须经此规范培训,培训讲师由技术管理部派遣; 项目组提出申请,可由技术管理部派遣讲师进行培训。 基于 java平台的应用系统技术架构规范 仅供内部使用 第17页 8.5 审查 审查小组对项目组的代码进行规范性审查。 8.6 申诉 对审查小组提出的项目组规范化问题,项目组可以向专家委员会提起申诉。 8.7 仲裁与处罚 专家委员会对项目组的规范化问题进行仲裁与处罚。
本文档为【基于Java平台的应用系统技术架构规范(试行)_v1】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_956759
暂无简介~
格式:pdf
大小:468KB
软件:PDF阅读器
页数:17
分类:互联网
上传时间:2012-07-23
浏览量:33