ABFrame项目设计与开发规范

更新时间:2024-06-06 11:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

PRIMETON TECHNOLOGIES, LTD. 上海普元信息技术有限责任公司

ABFrame(Application Base Framework)

项目设计开发规范

版本: 1.2 日期:2008年7月

ABFrame系统设计开发规范

目录

1. 引言 ........................................................................................................................................... 6

1.1. 编写目的 ................................................................................................................... 6 1.2. 背景 ........................................................................................................................... 6 1.3. 名词定义 ................................................................................................................... 6 1.4. 使用原则 ................................................................................................................... 6 2. 环境说明 ................................................................................................................................... 7

2.1. 开发工具 ................................................................................................................... 7 2.2. 开发环境 ................................................................................................................... 7 2.3. 运行环境 ................................................................................................................... 7 3. 总体规范 ................................................................................................................................... 7

3.1. 统一缩写或名词约定 ............................................................................................... 7 3.2. 需求/功能编号规范 .................................................................................................. 8 3.3. 子系统及构件包规划 ............................................................................................... 8 3.4. 应用架构介绍 ........................................................................................................... 9 3.5. 其他 ......................................................................................................................... 10 4. 配置规范 ................................................................................................................................. 10

4.1. 配置工具 ................................................................................................................. 10 4.2. 配置目录 ................................................................................................................. 11 5. 文档规范 ................................................................................................................................. 12

5.1. 文档命名规范 ......................................................................................................... 12 5.2. 文档编写要求 ......................................................................................................... 12 6. 数据库规范 ............................................................................................................................. 13

6.1. 操作规范 ................................................................................................................. 13 6.2. 命名规范 ................................................................................................................. 13

6.2.1. 数据库对象命名规范 ..................................................................................... 13 6.2.2. 字段命名规范 ................................................................................................. 14 6.2.3. 前缀约定 ......................................................................................................... 14 6.2.4. 属性默认类型定义 ......................................................................................... 15 6.3. 设计规范 ................................................................................................................. 15 6.4. SQL语言开发规范 ................................................................................................ 18

6.4.1. SQL命令的类型 ............................................................................................ 18 6.4.2. SQL命令的格式 ............................................................................................ 19 6.4.3. SQL命令的语法 ............................................................................................ 19 6.4.4. 高效的SELECT语句 .................................................................................... 21 6.4.5. 在程序中嵌入SQL语句时要注意的问题 ................................................... 22

7. 构件设计开发规范 ................................................................................................................. 22

7.1. 命名规范 ................................................................................................................. 22

7.1.1. 总体命名规范 ................................................................................................. 26 7.1.2. 构件包 ............................................................................................................. 26 7.1.3. 逻辑构件 ......................................................................................................... 27

共61页 第2页

ABFrame系统设计开发规范

7.1.4. 逻辑流 ............................................................................................................. 27 7.1.5. Java构件 ......................................................................................................... 27 7.1.6. 组合构件 ......................................................................................................... 27 7.1.7. 运算逻辑 ......................................................................................................... 28 7.1.8. 页面流 ............................................................................................................. 28 7.1.9. 工作流 ............................................................................................................. 29 7.1.10. 数据集 ............................................................................................................. 29 7.1.11. 命名Sql集 ..................................................................................................... 29 7.1.12. 命名Sql .......................................................................................................... 30 7.1.13. 页面资源 ......................................................................................................... 30 7.1.14. Java .................................................................................................................. 31 7.1.15. 配置信息 ......................................................................................................... 32 7.1.16. 包 ..................................................................................................................... 32 7.1.17. WEB目录 ....................................................................................................... 33 7.2. 设计开发规范 ......................................................................................................... 34

7.2.1. 构件包 ............................................................................................................. 34 7.2.2. 逻辑构件 ......................................................................................................... 34 7.2.3. 逻辑流 ............................................................................................................. 34 7.2.4. Java构件 ......................................................................................................... 38 7.2.5. 组合构件 ......................................................................................................... 38 7.2.6. 运算逻辑 ......................................................................................................... 38 7.2.7. 页面流 ............................................................................................................. 40 7.2.8. 工作流 ............................................................................................................. 41 7.2.9. 数据集 ............................................................................................................. 41 7.2.10. 命名Sql .......................................................................................................... 41 7.2.11. Java开发 ......................................................................................................... 41 7.2.12. Tag ................................................................................................................... 44 7.2.13. Filter ................................................................................................................ 44 7.2.14. Servlet ............................................................................................................. 44

8. 流程设计开发规范 ................................................................................................................. 45

8.1. 命名规范 ................................................................................................................. 45 8.2. 设计规范 ................................................................................................................. 45

8.2.1. 流程设计原则 ................................................................................................. 45 8.2.2. 流程设计方法 ................................................................................................. 46 8.2.3. 流程设计注意事项 ......................................................................................... 47 8.3. 开发规范 ................................................................................................................. 47

8.3.1. 流程相关数据的使用 ..................................................................................... 48

9. UI规范 ................................................................................................................................... 48 10. 其他规范 ......................................................................................................................... 48

10.1. 基础构件库使用、开发规范 ................................................................................. 48

10.1.1. 公共技术构件的开发规范 ............................................................................. 48 10.2. 数据总线的使用规范 ............................................................................................. 48 10.3. Session使用规范 .................................................................................................... 48

10.3.1. EOS6 Session管理机制 ................................................................................. 48

共61页 第3页

ABFrame系统设计开发规范

10.3.2. ABFrame Session内容 ................................................................................... 49 10.4. 业务日志 ................................................................................................................. 52 10.5. 异常处理 ................................................................................................................. 53 10.6. 业务字典的命名规则 ............................................................................................. 54 10.7. 操作提示信息的规范 ............................................................................................. 54 10.8. 公共模块的使用方法 ............................................................................................. 56

10.8.1. 分页模块 ......................................................................................................... 56 10.8.2. 通用数据选择构件使用规范 ......................................................................... 57

10.8.2.1. 使用场景 ............................................................................................... 57 10.8.2.2. 功能描述 ............................................................................................... 60

10.9. 菜单命名规范 ......................................................................................................... 61

共61页 第4页

ABFrame系统设计开发规范

文档修订记录

序版本号 号 1. 1.0 2. 1.1 3. 1.2 4. 5. 6. 7.

修订日期 2008-7-14 2008-07-18 2008-07-29 修订概述 创建 修改 修改 修订人 蔡述尧 蔡述尧 耿大伟 审核人 批准人 备注

共61页 第5页

ABFrame系统设计开发规范

1. 引言

1.1. 编写目的

为了保证ABFrame系统的开发过程中各个小组和成员的设计模式、程序结构和开发框架的一致性以及增强代码的可维护性,在遵循EOS6平台和J2EE相关规则的基础上,建立本系统的项目设计开发规范,作为与本项目及未来接入该平台的应用项目相关人员开展设计、开发工作的基础和依据,并作为项目质量评估的重要标准。

1.2. 背景

? ? ? ?

软件系统名称:ABFrame

任务提出单位:普元信息技术有限公司 任务开发单位:PSO售后服务部

系统最终用户:使用EOS6的开发人员

1.3. 名词定义

1) ABFrame:应用基础框架,为基于EOS6开发的各个应用提供模型和实现一致的基础框

架,提供了用户权限、组织机构、和基础服务(如业务字典、业务日志等)功能

2) EOS:上海普元公司提供的面向构件的SOA中间件平台,作为本项目应用软件的技术

平台

3) 构件:本规范所提到的构件及构件包的概念,均指EOS中的构件与构件包

1.4. 使用原则

1) 本规范由项目设计组维护,并指定专门的规范维护人员

2) 本规范作为基于ABFrame开发项目的规范指导性文件,允许在设计开发中进行补充、

完善或修正

3) 在项目开始正式开发之前,要求对项目组进行本规范的集中培训 4) 培训之后产生的零星规范性变动(如调整、补充、完善),需要在项目组中进行通告 5) 开发过程中,开发人员要随时查阅规范,以便了解开发要求,对于本规范文档不包含的

新的规范性要求,需要及时向规范维护人员提出 6) 开发阶段要求将规范性走查纳入项目计划,以便及时监控规范性执行情况,并挖掘新的

规范要求

共61页 第6页

ABFrame系统设计开发规范

2. 环境说明

2.1. 开发工具

使用EOS6.0作为本项目的技术架构和开发工具。

2.2. 开发环境

EOS6.0 Studio; DB:

配置管理:cvs客户端

配置要求:P4 2.0以上 内存1G以上 建议2G

2.3. 运行环境

3. 总体规范

3.1. 统一缩写或名词约定

本项目中,无论数据库设计、程序文件命名、文档文件命名、变量命名,对于同一概念,如果需要使用缩写,统一使用如下定义。 词语/缩写 EOS ABFrame info doc src demo fea req query add update 英文描述 Enterprise Operation System Application's Basic Framework 中文描述 普元面向构件的SOA中间件平台 基于EOS6实现的应用基础框架 信息 文档 源码 项目的静态页面原型 功能点,指经过设计后分解的功能 需求点,指需求调研后形成的用户需求 查询,在定义程序文件名称时,“查询”功能使用的英文为query,例如account_query.jsp 增加,在定义程序文件名称时,“增加”功能使用的英文名称为”add”,例如account_add.jsp 编辑,在定义程序文件名称时,“修改”功能使

共61页 第7页

Information Document Source Code Feature Requirement ABFrame系统设计开发规范

用的英文名称为“update”,例如account_update.jsp input delete list import export rtn success fault error 业务字典 Delete import export Return Success fault Error 输入,在定义程序文件名称时,“输入”功能使用英文名称为”input”,例如account_input.jsp 删除,在定义程序文件名称时,“删除”功能使用的英文名称为“delete”,例如account_delete.jsp 结果列表使用的英文名称,例如account_list.jsp 导入,在定义程序文件名称时,“导入”功能使用的英文名称为“import”,例如dict_import.jsp 导出,在定义程序文件名称时,“导出”功能使用的英文名称为“emport”,例如dict_export.jsp 返回,系统中表示返回的英文缩写 系统中表示成功的英文单词均使用success 系统中表示失败的英文单词均使用Fault 系统中表示错误的英文缩写 系统中与业务相关的代码及对代码的描述,例如,用cson_authlevel表示用户认证等级,而0:所有用户,1:登录用户,2:产品绑定用户等。 EOS提供了对业务字典的管理,通过EOS业务字典功能,为系统实现提供的大量构件,方便开发。

3.2. 需求/功能编号规范

需求编号规范:“req”+“-”+一级模块编号+“-”+二级模块编号+“-”+功能点编号

功能点(用例)代码编号规范:“fea”+“-”+一级模块编号+“-”+二级模块编号+“-”+功能点编号 注:

1. “fea”表示功能(Feature),“req”表示需求(Requirement) 2. 一级模块对应一个构件包(编号为01-99),二级模块对应构件包下的构件(编号

为01-99),功能点为构件下的具体功能(编号为01-99)

3.3. 子系统及构件包规划

根据《系统功能分解矩阵》,一级模块与EOS构件包命名最后一段一致:小写英文单词组成

的业务描述。如:权限管理(auth) 子系统 ABFrame 构件包中文名 权限管理与控制 构件包名称 auth 共61页 第8页

构件中文名称 认证管理 构件名称 auth

ABFrame系统设计开发规范

权限管理 组织机构管理 应用基础服务 应用基础工具 应用功能管理 菜单管理 角色管理 操作员管理 数据权限管理 机构管理 岗位管理 人员管理 职务管理 工作组管理 业务机构管理 单点登录 业务字典 业务日志 元数据管理 基础构件 文件上传 通用数据选择 function menu role operator dataright organization position person duty workgroup busiorg sso busidict busilog metadata comm fileupload datachoose privilege organization common Utility 说明:

1. 构件包和构件名称全部使用英文小写

2. 构件包名称建议采用长命名空间的方式,如com.primeton.abframe.auth 3. 更细的功能分解,参见项目文档《功能分解与跟踪矩阵》

3.4. 应用架构介绍

本应用采用J2EE架构,应用系统的功能开发,将通过Primeton EOS6.0以面向构件和SOA的方式进行构造,应用的总体架构参见下图:

共61页 第9页

ABFrame系统设计开发规范

图形说明:

1、 Primeton EOS:普元公司提供的面向构件中间件,在本应用中需要用到EOS的以下

部分:EOS Server、EOS Studio、EOS Component、EOS Governor、EOS Workflow等,详细信息参见普元EOS产品的有关资料

2、 有关应用架构的详细信息,请参阅系统设计说明书

3.5. 其他

在编码过程中,要求尽量使用公用模块,以减少系统编码、维护工作量,使程序具有良好的结构性。

满足以下任一种情况,请抽象公用模块: ? 超过三个地方使用的相同逻辑的代码;

4. 配置规范

4.1. 配置工具

1) 项目内部版本控制使用cvs服务器。 2)

共61页 第10页

ABFrame系统设计开发规范

4.2. 配置目录

配置目录如下: ABFrame. ├─doc

│ ├─0_项目过程 │ │ ├─0_准备 │ │ ├─1_需求 │ │ ├─2_设计

│ │ │ ├─0_设计开发规范 │ │ │ ├─1_总体设计 │ │ │ ├─2_数据库设计 │ │ │ ├─3_详细设计 │ │ │ ├─4_UI设计 │ │ │ └─5_接口设计 │ │ ├─3_开发

│ │ │ ├─开发文档 │ │ │ └─走查记录 │ │ ├─4_测试

│ │ │ ├─功能测试 │ │ │ ├─性能测试 │ │ │ └─集成测试 │ │ ├─5_部署

│ │ │ ├─用户培训 ――培训教程,培训计划等 │ │ │ ├─系统上线 ――上线过程产生的各种文档,如施工日志等 │ │ │ ├─系统安装 ――安装文件、脚本、安装步骤等 │ │ │ └─项目验收 │ │ └─6_运维

│ │ ├─故障处理 │ │ ├─日常维护 │ │ ├─用户文档 │ │ ├─系统巡检 │ │ └─系统档案 │ ├─1_项目管理 │ │ ├─0_管理方案 │ │ ├─1_项目计划 │ │ ├─2_人员管理 │ │ ├─3_项目报告 │ │ │ ├─会议纪要 │ │ │ ├─阶段总结 │ │ │ └─项目周报 │ │ ├─4_变更管理 │ │ ├─5_质量管理

共61页 第11页

ABFrame系统设计开发规范

│ │ ├─6_配置管理 │ │ ├─7_费用管理 │ │ ├─8_启动收尾 │ │ └─9_专业服务表单 │ └─9_参考资料 │ ├─业务资料 │ ├─技术资料 │ ├─模板 │ └─软件补丁 └─src

└─abframe

5. 文档规范

5.1. 文档命名规范

1) 文档名称=系统名称+“_”+中文文档名[+“_”+作者姓名]。(红色为可选) 如:《ABFrame_系统设计说明书.doc》或《ABFrame_系统设计说明书_蔡述尧.doc》 2) 修改者必须在文档中注明修改时间、版本、和大致内容

5.2. 文档编写要求

1) 统一工具列表:

? Word 2003:用于编写文档

? Excel 2003:用于项目中表格信息的整理 ? PowerPoint 2003:用于进行项目汇报

? Visio 2003:用于绘制设计图形,如部署图等 ? Project 2003:用于制定项目计划

? MindManger Pro6:用于绘制思维导图,开会讨论的思维整理 ? Rose 2003:用于进行设计用例、活动图、时序图 ? Powerdesigner 12.5:用于进行数据库设计

2) 对于项目的成果性文档,要求在编写前提供统一的模板,编写和修正过程中,要记

录变更历史

3) 在Word中的插图尽可能使用JPG或GIF以及PNG格式,以降低WORD文档的

大小

4) 所有文档中涉及的图形,要求提供原始文件,并保存到配置库中 5) 文档一旦初步定稿之后,评审者采用修正模式修改文档

6) 如果文档参考了其他资料,需要提供参考资料的出处,如某个文档、网站、书籍

共61页 第12页

ABFrame系统设计开发规范

6. 数据库规范

6.1. 操作规范

1、 在设计期间,确定专门的DBA,在开发期间对数据库的变更都需要通过DBA来实

施,实施的流程如下:

a) 变更经变更小组讨论通过后,填写数据库变更申请

b) 开发人员或设计人员向DBA提出变更要求(最好提供变更的脚本) c) DBA更改数据库设计(PDM文件)

d) DBA提供数据库变更后整体脚本和数据库局部变更脚本 e) DBA使用脚本进行数据库变更,并做好变更记录 f) DBA通知所有相关人员(邮件方式)

2、 系统通过EOS提供的数据实体或命名SQL方式操作数据库,不建议使用其他方式访

问数据库。

3、 数据实体定义时,建议Entity名首字母大写其他为小写字母,Field名称均采用小写

字母,符合java规范,其映射的数据库字段名为大写

4、 应用中需要使用到的查询,如果是比较通用的查询,尽可能建立视图,其次可以建

立命名SQL,尽可能避免在逻辑中拼凑SQL语句。

6.2. 命名规范

6.2.1.数据库对象命名规范

? 表名构成:系统名称缩写+_+模型域前缀+_+对象名称(英文单词或英文缩写),例

如权限控制的某个表名:ABF_AC_FUNCTION ? 表名全部使用大写

? 表名建议不要太长(15个字符以内),如果太长,请使用单词的缩写 ? 对象名称不能使用汉字

? 对象名称不能使用中文拼音或中文拼音的首字母 ? 对象名称尽可能不使用阿拉伯数字

? 必须保证你的对象名称没有和保留词、数据库系统或者常用访问方法冲突 ? 绝对不要在对象名称的字符之间留空格

? 如果对象的名称仅有一个单词,则不使用缩写 对象名称 表 键和索引 主键 外键 索引 视图 对象类别 前缀_对象名 P_对象名 F_父对象名(缩写)_子对象名(缩写) I_对象名_序号 前缀_V_对象名 共61页 第13页

命名规则 示例 OM_EMPLOYEE P_EMPLOYEE F_ORG_EMP I_EMPLOEE_1 OM_V_PERSON

ABFrame系统设计开发规范

包 存储过程 函数 触发器 序号生成器 前缀_PACK_对象名(缩写) 前缀_PROC_对象名(缩写) 前缀_FUNC_对象名(缩写) 前缀_TRI_对象名(缩写) 前缀_SEQ_对象名(缩写) OM_PACK_ORG 6.2.2.字段命名规范

? 字段名全部大写

? 为保持字段名短小,字段不同单词之间不使用任何连接符,如“_”、“-”之类 ? 不同表的同一个业务字段类型、长度、字段名称保持一致,如果表中同时存在多个

业务字段引用,则类型长度保持一致,名称在保留原名称前加2缩写。例如,客户编号可能存在于多个表中,要求采用同样的字段名,并且类型、长度一致。又例如机构表中存在两个字段都是对机构编号ORGID的引用,一是此机构的编号,二是父机构的编号,则父机构编号使用PARENTORGID表示。

? 字段名建议不要太长(15个字符以内),如果太长,请使用单词的缩写 ? 必须保证你的字段名称没有和保留词、数据库系统或者常用访问方法冲突 ? 绝对不要在字段名称的字符之间留空格

? 主键字段统一以ID结尾,并使用numeric类型,如App编号:APPID numeric(10) ? 包含”代码“的字段统一以CODE结尾,如应用代码APPCODE ? “日期”类型的字段统一以DATE结尾,“时间”类型的字段统一以TIME结尾 ? 字段名称建议命名规则(设计期持续更新) 字段分类 主键字段 包含代码 名称 日期 时间 判断字 备注 描述 建议命名规则 以ID结尾 以CODE结尾 以NAME结尾 以DATE结尾 以TIME结尾 以IS结尾 REMARK 以DESC结尾 备注 如:机构编号ORGID 如:机构代码ORGCODE 如:机构名称ORGNAME 如:出生日期BIRTHDATE 如:创建时间CREATETIME 如:是否编辑ISEDITABLE 如:备注REMARK 如: ORGDESC 6.2.3.前缀约定

AC_:表示权限控制部分的数据库对象 OM_:表示组织机构部分的数据库对象

AT_:Application Tools,应用工具类的数据库对象 EOS_:EOS系统表的前缀

共61页 第14页

ABFrame系统设计开发规范

对于此处没有约定的应用数据库前缀,采用应用缩写作为前缀。

6.2.4.属性默认类型定义

属性类别 人的姓名 电话号码 部门 单位/机构名称 地址 判断字 日期 日期时间 类型 Varchar Varchar Varchar Varchar Varchar CHAR DATE 32 32 64 64 128 1 512/1024/2048 8,2? 3,2? 255 长度 0:否 1:是 如登录时间、操作时间等 大于2048请采用CLOB类型 备注 TIMESTAMP 意见、理由、描述、Varchar 简介、备注 CLOB 图片 金额 比例 业务字典类字段 BLOB NUMERIC NUMERIC Varchar 6.3. 设计规范

? 凡是自身存在父子关系的表,均引入一个序列路径的字段,以方便检索形成菜单树,其

规则为:当某记录为根节点时,其序列路径为:“.”+主键值+“.”;当不是根节点时,则为其父节点的序列路径+“.”+主键值+“.”;引入一个子节点数量字段用于统计子节点数量;引入一个字段是否叶子节点字段。

? 在进行数据库表和字段设计时,要求提供对字段或表名的中文名称,对于复杂的字段,

提供comment的描述

? 对于数据增量很大的数据表,需要考虑设计备份表

? 必须考虑数据库访问速度,对于数据量较大的表,一定要加索引

? 一般情况下,表的设计必须满足三个数据库设计范式,对于违反范式的设计,需要提供

理由:

1) 范式一:表结构中不能含有任何重复的数据字段。 违反该范式的例子: 求职人员表:

求职人员编号 求职人员姓名 联系电话1 联系电话2 C001 C002 张三 李四 63179975 64516408 63179976 64516409 问题:若增加一个“联系电话3”则要修改表结构,原来的应用程序也将重新修改。

共61页 第15页

ABFrame系统设计开发规范

正确处理:

求职人员表: 求职人员编号 求职人员姓名 C001 C002 张三 李四 求职人员联系表:

求职人员编号 序号 联系电话 C001 C001 C002 C002 01 02 01 02 63179975 63179976 64516408 64516409

2) 范式二:要求每一列均函数性地依赖于主关键字。 违反该范式的例子: 物业分布表: 分布点编号 所在地址 所在城市 H001 H002 H003 蒲汇塘路 上海 漕宝路 汉中路 上海 上海 主要服务表: 服务编码 服务收费 P01 P02 P03 70.99 21.00 502.54 任务描述 树木修剪 上油 熔炉 日期 1997/11/15 1997/12/01 1997/12/03 服务记录表:

分布点编号 服务编码 所在地址 H002 H002 H003 P02 P03 P01 漕宝路 漕宝路 汉中路 问题:服务记录表是以“分布点编号”和“服务编码”作为主关键字。“所在地址”和“任务描述”两列不完全函数性地依赖于主关键字。显然服务期间地址通常是不变的,不管在什么地方执行任务,特定任务的描述应该是一样的。

正确处理: 主要服务表:

服务编码 服务收费 任务描述 P01 P02 P03 70.99 21.00 502.54 熔炉 树木修剪 上油 服务记录表:

分布点编号 服务编码 日期 H002 P02 1997/11/15

共61页 第16页

ABFrame系统设计开发规范

H002 H003

P03 P01 1997/12/01 1997/12/03 3) 范式三:表中记录符合第二范式且不存在传递依赖,当表中含有一定其他列的非

主列时,存在传递依赖。

违反该范式的例子: 学生考试成绩表 学号 课程 S001 CIS091 S003 CIS091 考试日期 成绩 累计平均 81 77 90 1997/10/17 84 1997/10/17 93 S002 MGT100 1997/10/17 72 问题:“学号”,“课程”和“考试日期”为主关键字。“累计平均”列代表该学生所有课程成绩的平均,这列传递依赖于“学号”列,因此不符合第三范式。 正确处理: 学生个人信息表 学号 姓名 累计平均 S001 张三 91 S002 李四 80 S003 王五 78 学生考试成绩表 学号 课程 S001 CIS091 S003 CIS091

4) 特殊情况可不用设计范式 ? 存储计算值到数据库中

存储计算值:通常,一个设计良好的关系数据库不存储任何计算数据如总和,平均值,最大值和最小值。这些数据通常在运行时利用基本数据来计算。然而,有些场合把计算值储存起来可能更简单,更快,更明智。 比如: 旅客表: 旅客编号 姓名 Z001 ... L004 ... W008 张三 李四 王五 飞行里程

共61页 第17页

考试日期 成绩 1997/10/17 84 1997/10/17 93 S002 MGT100 1997/10/17 72 飞行情况表: 旅客编号 飞行次数 飞行日期 Z001 ... L004 11 1800 1998/01/02 7832 1998/02/03 7743 ABFrame系统设计开发规范

... W008 27 1998/04/03 743 问题:“飞行情况表”会很快增加,渐渐达到几万行。旅客若打电话询问自己飞行有多少公里,希望立刻得到回答,然而查询“飞行情况表”并把所有单个里程加起来可能要花费几秒的时间。这时就需要把总和信息存储起来,以供快速查询。 正确处理: 旅客编号 姓名 旅客里程 Z001 ... L004 ... W008 张三 73873 李四 92923 王五 8727 为保持总公里数的相对实时性,可以每晚运行一个加总程序更新总和,这样做可至少带来两个好处:

其一:总公里数可快速获取。

其二:更好地平衡负载。繁重的加总工作放在晚上处理。 为了更快更新,从而得到更准确的数据,需要使用类似触发器的方法来得到最新的数据。

? 将历史信息分割到其他表中 查找历史:假设维护一个信用卡支付系统,顾客通常打电话来了解自己最近的收支情况。偶尔他们想知道几个月前的收支情况。在这个应用中最主要的表如下: 业务交易表: 交易编码 客户编码 使用日期 金额 T0001 ... T1012 C2021 ... C3000 1997/11/1 414.88 ... 1997/11/9 65.90 问题:该表会很快增长到几百万行,查找一个客户的所有记录需要几秒钟。事实上顾客和服务人员对这反应时间都有抱怨。 改进方法一:由于客户一般只查询最近月份的交易信息,可以另加两个同样的缓冲表,每月底,进行一次数据移动即可(把最近月份的数据删除)。

改进方法二:可利用其“分区”的概念,通过复制机制,将一个数据库复制到另外一个数据库中。

6.4. SQL语言开发规范 6.4.1.SQL命令的类型

一些数据库开发人员和参考书将SQL(Structured Query Language)语句分为三种类型: 1. DDL───Data Definition Language 数据定义语言。

这些命令用来定义数据的结构,比如 创建、修改或者删除数据库对象(例如CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEX、DROP INDEX等)。

共61页 第18页

ABFrame系统设计开发规范

2. DCL───Data Control Language 数据控制语言。

这些命令用来定义数据库用户的权限(例如GRANT、REVOKE、COMMIT、ROLLBACK、LOCK等)。

3. DML───Data Manipulation Language 数据操作语言。

这些命令用来检索与更新数据库记录(例如INSERT、UPDATE、DELETE、SELECT等)。

虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统;并且在不同的数据库系统中使用的命令也有差别。

6.4.2.SQL命令的格式

以下定义了书写SQL语句所应遵循的准则:

? SQL语句中的关键字采用大写字母书写。 ? SQL语句中的字段名采用大写字母书写。 ? SQL语句中的函数名采用大写字母书写。

? SQL语句每一句从第一列开始书写,各从句部分以两格为单位嵌套缩进。 ? 当SQL语句中存在多个表时加入简短的别名。 ? 尽量使用SQL标准语法,避免使用方言

? 尽量少使用或不使用存储过程,减少移植的工作量。

1. 例一:

SELECT DEPNO, MANAGER, DEPTNAME FROM DEPARTMENTS

WHERE DEPTBANE = ?Sales?;

2. 例二:

SELECT A.DEPTNAME, B.LNAME

FROM DEPARTMENTS A, EMPLOYEES B WHERE A.MANAGER = B.EMPNO;

6.4.3.SQL命令的语法

一条SQL语句的语法是构造该语句的方法,以下给出常用的SQL语句的语法定义: 1. INSERT:

INSERT IINTO {TABLE|VIEW} [(COLUMN_LIST)] VALUES (value_list)| selectstatement;

注:INSERT文中虽然column_list是可选项,但考虑到数据库字段有可能增减,固定不变的插入值对应的字段会不一致,所以column_list必须在程序中明记。

例:

INSERT INTO DEPARTMENTS (DEPTNO, DEPTNAME, MANAGER) VALUES (?0?, ?Headquarters?, ?1001?);

2. UPDATE

共61页 第19页

ABFrame系统设计开发规范

UPDATE {table|view} SET (newvalue_list) [wherestatement] 例:

UPDATE DEPARTMENTS SET MANAGER = ?1007?

WHERE DEPTNAME = ?Sales?;

3. DELETE DELETE

FROM table

[WHERE whereexpr] 例: DELETE

FROM DEPARTMENTS

WHERE DEPARTMENTS = ?Sales?;

4. SELECT

简单的SELECT:

SELECT [ALL|DISTINCT] column_list FROM table_list [WHERE whereexpr] [ORDER BY ordkey_list] [GROUP BY group_list] [HAVING having_list]

复杂的SELECT: simpleselect UNION [ALL] simpleselect 例:

SELECT *

FROM DEPARTMENTS;

ORDER BY DEPTNAME DESC;

SELECT A.DEPTNAME, B.LNAME

FROM DEPARTMENTS A, EMPLOYEES B WHERE A.MANAGER = B.EMPNO;

SELECT B.DEPTNAME, count(B.EMPNO) AS EMPTNOCOUNT FROM EMPLOYEES A, DEPARTMENTS B

共61页 第20页

ABFrame系统设计开发规范

WHERE B.DEPTNO = A.DEPTNO

GROUP BY B.DEPTNAME, B.DEPTNO HAVING EMPTNOCOUNT >2;

SELECT MOVIE_NAME, RATING, LENGTH FROM MOVIES

WHERE (RATING, LENGTH) IN (SELECT RATING, MAX(LENGTH) FROM MOVIES

GROUP BY RATING);

有关联表的SELECT语句

对于从几个表中取数据,要注意表与表之间的正确关联。是内部连接还是外部连接,以免造成选取数据的遗漏。

内部连接,是两个表中的字段进行一一对应,如果在B表中找不 到A表中的相应字段,则A表中的这条记录也不会被选取出来。

外部连接,有左连接和右连接两种。A表左连接B表,即相当于B表右连接A表。此时,A表是主表,A表中所有符合条件的记录都应被选取出来,即使在B表中找不到相应字段,则只是该选取字段为NULL而已。

关于外部连接,不同数据库的语法稍有不同。见下例:

EMPLOYEES表为主表,需根据DEPTNO从DEPARTMENTS表中取得DEPTNAME ? DB为DB2时:

SELECT A.DEPTNO, A.EMPTNO, B.DEPTNAME FROM EMPLOYEES A LEFT OUTER JOIN DEPARTMENTS B ON A.DEPTNO = B.DEPTNO

? DB为SQL SERVER时:

SELECT A.DEPTNO, A.EMPTNO, B.DEPTNAME FROM EMPLOYEES A LEFT JOIN DEPARTMENTS B ON A.DEPTNO = B.DEPTNO

? DB为ORACLE时:

SELECT A.DEPTNO, A.EMPTNO, B.DEPTNAME FROM EMPLOYEES A , DEPARTMENTS B WHERE A.DEPTNO = B.DEPTNO(+)

6.4.4.高效的SELECT语句

? 将最小的表放在最后。

? 将最具限制性的条件放在最后。

? 避免在查询中使用函数,特别是在查询中含有被设为索引的列时更是如此,这会使索

引失效。

? 避免在LIKE函数的起始处使用通配符。 ? 不要使用过多的子查询。 ? 不要请求太多的列。 ? 不要请求太多的行。

共61页 第21页

ABFrame系统设计开发规范

6.4.5.在程序中嵌入SQL语句时要注意的问题

? ? ? ? ? ? ?

由于在程序中嵌入的SQL语句可能非常大,应该及时将字符串变量赋空,以回收资源。 如无特殊需要,程序中应只建一个连接。

如果使用的是远程数据库,应仔细考虑失败时的处理。 字符串变量加入SQL语句时,单引号必须加上。 在调试窗口打印出最终或重要的SQL语句。 当数据库对象不需要时,及时释放。

写较长的SQL文,尽量用字符串拼接,这样SQL文可以按子句分行,可加注释,便于以后的维护。

7. 构件设计开发规范

7.1. 命名规范

EOS6中以构件包为复用的基本对象,构件包中包含包、组合构件、逻辑构件、Java构件、运算逻辑、页面流、数据集、命名Sql集、工作流逻辑、页面资源、配置信息等概念,项目资源树如下图所示(蓝色字体及带框的节点属于开发人员自定义的,黑色字体属于开发工具产生的节点。): 图一:项目主目录结构:(此目录结构在LA2后将有变化)

共61页 第22页

ABFrame系统设计开发规范

说明:

1、 一个项目可以包含多个构件包

2、 每个构件包通过“分类浏览”方式浏览,可以看到包含的系统级的目录包括

构件装配、构件实现、运算逻辑、页面流、工作流、数据(数据模型、命名Sql)、页面资源、Java、配置信息、WEB。

图二:项目详细目录结构(分上下两部分)

共61页 第23页

ABFrame系统设计开发规范

共61页 第24页

ABFrame系统设计开发规范

说明:

创建构件包时,将产生一个与构件包同名的“包”,因此,在构件装配、构件实现、页面流、数据模型等目录下创建相应资源时,都缺省挂在了这个“包”下(上图没有显示“包”)

以下针对上面涉及的概念定义相应的命名规范。

共61页 第25页

ABFrame系统设计开发规范

7.1.1.总体命名规范

1) 路径规划

应用基础框架:com.primeton.abframe.

2) 对于应用中的变量命名,要求遵循如下规范:

a) 在逻辑流中,变量名称遵循Java变量命名规则,例如operator,userRole b) 页面流中,变量命名和逻辑流命名规则一致

3) 为保证程序逻辑或代码的可追溯性,要求每个文件都保留正确合适的开发人员信

息,在EOS安装的时候,有一个步骤是设置作者和姓名,这些设置的信息,也可以通过EOS Studio的首选项查看和重新设置,如下图:

针对创建者和部门,按照如下要求进行设置:

作者:输入开发环境使用者正式姓名的中文,例如张山,则输入”张山”,不允许使用开发人员的英文名或者系统缺省的用户名,如administrator

部门:输入开发环境使用者所在公司(或部门)的名称,例如“普元PSO”等 在做好上面的设置后,每个新建的文件均会按照设置填入缺省的姓名和部门。

7.1.2.构件包

? 概念

构件包是EOS6项目中基础的业务实现和业务部署单元,其中包含了构件,构件实现以及一些额外需要的资源(如配置信息、页面资源等)

? 命名规范

1) 构件包名称全部使用英文小写

2) 构件包名称采用长命名空间的方式,如com.primeton.abframe. 3) 构件包名=系统命名空间+”.”+业务描述的英文单词(缩写),例如org(缩写参见

总体规范部分)

4) 构件包命名在设计期由设计人员确定,不允许开发期确定 5) 显示名称描述为中文信息

6) 构件包属于一个抽象概念,但构件包创建后,会创建一个与构件包同名的包名

共61页 第26页

ABFrame系统设计开发规范

7.1.3.逻辑构件

? 概念

采用EOS的逻辑流实现的构件。

? 命名规范

1) 逻辑构件名称为构件对象的单词(或缩写),其后可选如Manager等动词,首字母

大写,与java类命名一致。如UserManager、MenuManager

2) 逻辑构件直接建在以构件包为名称的包下,原则上不增加新的包的定义 3) 逻辑构件名称不使用前缀或后缀 4) 显示名称描述为中文信息

5) 逻辑构件是包含一个单一实体管理功能的操作集合,即增(add)、删(delete)、改

(update)、查(query)等

7.1.4.逻辑流

? 概念

逻辑流属于逻辑构件的操作,它是采用EOS6图形化组装方式表达的一种程序逻辑。

? 命名规范

1) 逻辑流名称=参照java方法命名方式如对Employee的增、删、改、查的完整名称

就是 addEmployee、deleteEmployee、updateEmployee、queryEmployee 2) 如果名称太长,建议使用词汇的缩写 3) 显示名称描述为中文信息

7.1.5.Java构件

? 概念

采用Java语言实现的构件,符合SCA_JavaAnnotationsAndAPIs_V100的规范。 ? 命名规范

1) Java构件名称中单词的首字母大写,其余小写 2) Java构件的包命名空间为:

“com.”+”企业名称”+应用代号+”.” +构件包名(不含前缀)+“.service” 例如com.primeton.abframe.comm.service 3) 本项目原则上不使用Java构件

7.1.6.组合构件

? 概念

组合构件包含在构件装配目录下,由一组具有业务上相互联系的构件(逻辑构件、Java构件、组合构件)组成,本身也可以定义对外的服务和引用,其实质是一种更大粒度的构件。

共61页 第27页

ABFrame系统设计开发规范

组合构件可以定义构件的服务,引用关系,构件的实现等。

? 命名规范

1) 组合构件名称为构件的业务对象描述的单词,并全部采用小写,如auth 2) 组合构件直接建在以构件包为名称的包下,原则上不增加新的包的定义 3) 组合构件名称不使用前缀或后缀

4) 组合构件中,组装的构件名称为业务对象+后缀”Com”,例如authCom 5) 只有当项目与外部应用存在服务接口时,才创建组合构件 6) 显示名称描述为中文信息

7) 组合构件中定义服务接口时的命名规范为:动作+对象,例如finishActivityInsttance

7.1.7.运算逻辑

? 概念

运算逻辑是支撑业务处理的一组原子操作,对应于Java类的一个方法,运算逻辑可以在逻辑流中被组装。

EOS平台提供了一系列运算逻辑,通过对该系列运算逻辑的组合,基本可以实现业务的处理。

? 命名规范

1) 运算逻辑类的包路径规划:

“com.” +”企业名称”+应用代号+”.” +构件包名(不含前缀)+“.bizlets” 例如com.primeton.abframe.comm.bizlets

2) 运算逻辑类的命名规范遵循Java类命名规范,首字母大写,类根据业务来划分,类名

建议使用业务对象名称,由多个单词构成时,每个单词首字母大写

3) 每个运算逻辑类包含一组具有某些共同特性的运算逻辑,禁止将运算逻辑杂乱无章分

布在不同的运算逻辑类中,正确的实例如业务异常操作类com.primeton.abframe.comm.bizlets.BusiException.java,在该类下包含一组与业务异常相关的运算逻辑。

4) 运算逻辑命名符合java方法命名规则,其,例如writeLog,如果涉及多个单词(缩写),

则每个单词(缩写)的首字母大写

5) 运算逻辑名称不使用前缀或后缀(与EOS5对运算逻辑的命名规范有差异)

6) 某些运算逻辑支持参数可以按组增加,则建议运算逻辑名后加“Batch”,如

setNodeValueBatch

7.1.8.页面流

? 概念

页面流用来描述单个HTTP请求的处理过程或者多个请求/页面之间的跳转关系。 ? 使用原则

一个逻辑构件对应一个页面流,即一个页面流中是包含一个实体的所有页面操作。 一个功能模块可能涉及多个实体间的交互操作,可设计多个页面流,采用调用(对应实体的)子页面流方式

共61页 第28页

ABFrame系统设计开发规范

? 命名规范

1) 页面流名称=业务对象+动作,其中业务对象单词(缩写)全部小写,动作(缩写)

的首字母大写,如employeeManager,原则上应与逻辑构件名称一致。

2) 与某个构件相关的页面流,创建一个与该构件名相同的包(放置在构件包同名的包下),

页面流创建于该包下,例如机构管理构件包存在一个工作组管理的构件(workgroup),则在页面流下面创建workgroup的包,与工作组管理相关的页面流创建在workgroup下

3) 尽量不要在页面流上直接实现业务逻辑,而是在逻辑流中实现,在页面流中调用。 4) 页面流的action 为英文命名,使用单词(缩写)全部小写。通常为一个动词,如果表达

不足使用动宾短语此时宾语部分首字母大写。如:edit,query,queryEmp 5) 页面流显示名称描述为中文信息

7.1.9.工作流

? 概念

工作流是针对工作中具有固定程序的常规活动而提出的一个概念,通过将工作活动分解定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。

? 命名规范

参见流程设计开发规范部分。

7.1.10. 数据集

? 概念

数据集是一系列实体的集合,用来统一管理实体。 ? 命名规范

1) 数据集名称采用小写,如session、auth、orginzation等

2) 数据集直接建在以构件包为名称的包下,原则上不增加新的包的定义,例如

com.primeton.abframe.auth.auth.datasetx

3) 所有数据集中设计的实体,以实体导入时的命名为准。

7.1.11. 命名Sql集

? 概念

是一组命名Sql的集合,体现为一个以.namingsqlx为后缀的XML描述文件。 ? 命名规范

1) 命名sql集名称采用小写,并直接建在以构件包为名称的包下,如

com.primeton.abframe.auth.auth.namingsqlx

2) 命名sql集名称不使用前缀或后缀,直接以业务对象单词(或其缩写)命名

共61页 第29页

ABFrame系统设计开发规范

7.1.12. 命名Sql

? 概念

命名SQL就是给一个sql起一个唯一标识(id),以及配置该sql执行所需要的参数和如何处理sql执行完后的结果。然后在使用的时候,传入id和参数即可。 ? 命名规范

1) 命名Sql名称=操作+对象,操作全部小写,对象首字母大写,如deleteDictType,

queryUserRoles

2) 操作分为:query、update、insert、delete

3) 命名SQL中,字段名用大写,映射结果集的属性也大写

7.1.13. 页面资源

? 概念

页面资源的类型包括:JSP、HTML、JS、图片等 ? 命名规范

1) 在构件包下为每个构件建立一个文件夹,名称与构件名称一致(如果逻辑构件名

带”Manager” 可以去掉),文件夹下创建与该构件相关的页面资源,例如构件busidict,在页面资源下创建busidict目录

2) 如果构件涉及较多的不同页面资源,如js、jsp、图片资源比较多,可以在构件同名的

文件夹下再创建script和image,并将相应资源放置在目录下,如下图:

共61页 第30页

ABFrame系统设计开发规范

3) 页面资源文件一律使用小写字母,命名一般采用主谓格式,各个单词之间使用下划线

“_”连接,如org_tree.jsp、dictionary.js

7.1.14. Java

? 概念

EOS6中所有JAVA文件(包括运算逻辑和JAVA构件将自动呈现在Java目录下),另外,允许通过该目录开发项目中其他的JAVA程序,包括工具类,测试类、Tag类、Filter类等。 ? 命名规范

1) 建议在开发环境中设置好格式,开发过程当中用快捷方式自动格式化。 2) Package 的命名

Package 的名字全部采用小写字母,命名规则如下:

“com.” +”企业名称”+应用代号+”.” +构件包名(不含前缀)+“类别”,例如:com.primeton.abframe.comm.bizlets

此外,对于包名我们做如下约定:

a) 工具函数类包名前缀为.util,如com.primeton.abframe.auth.util b) Servlet类包名前缀为.servlet,如com.primeton.abframe.auth.servlet c) test case类包名前缀为.test,如com.primeton.abframe.auth.test d) Tag类包名前缀为.tag,如com.primeton.abframe.auth.tag

e) Filter类包名前缀为.filter,如com.primeton.abframe.auth.filter

共61页 第31页

ABFrame系统设计开发规范

3) Class 的命名

Class 的名字必须由大写字母开头而其他字母都小写的单词组成,例如:DataFile或InfoParser。

4) Class 变量的命名

变量的名字必须用一个小写字母开头。后面的单词用大写字母开头,例如:debug 或 inputFileSize。

5) Static Final 变量的命名

Static Final 变量的名字应该都大写,并且指出完整含义,例如:MAX_UPLOAD_FILE_SIZE=1024。

6) 参数的命名

参数的名字必须和变量的命名规范一致。

7) 数组的命名

数组应该总是用下面的方式来命名: byte[] buffer; 而不是: byte buffer[];

8) 方法的参数命名

使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字: SetCounter(int size) {

this.size = size; }

7.1.15. 配置信息

? 概念

由于构件包在EOS6中是一个独立的部署单元,因此构件包提供的配置信息目录,允许定义异常、国际化资源文件、日志配置、Handler等 ? 命名规范

遵循相关配置规范。

7.1.16. 包

? 概念

EOS6允许在很多资源类型下创建包,用以构造项目的命名空间。

EOS6创建构件包时,会自动创建构件包同名的包,创建逻辑构件时,也会创建与逻辑构件同名的包。

共61页 第32页

ABFrame系统设计开发规范

? 命名规范

1) 包命名一律要求为小写

2) 在各个资源下创建包的规范参见各个资源的命名规范,例如逻辑构件、组合构件等

7.1.17. WEB目录

? 概念

WEB目录是针对整个项目的WEB配置目录,允许放置对整个应用有效的资源文件,包括公共的js、图片、页面、以及WEB-INF的配置等

? 命名规范

1) WEB目录下文件的命名规范。 目录结构

common -放置公共JSP文件

images - 存放项目中运用的图片资源,建议图片名称使用abf-前缀。 scripts - 存放项目中公共的JavaScript资源。 styles - 存放项目中运用的样式文件。

2) 构件包(功能)级资源严禁放在WEB目录下

7.1.18. 国际化资源文件

? 概念

页面的信息的国际化内容都存放在构件包的配置信息下的resources/i18n目录下的资源文件中

? 命名规范

1) 资源文件的命名规范。

资源文件的命名按照构件包和子构件包划分,每个构件(子)包对应一组资源文件,每组资源文件包括多个语种的对应信息,如机构维护的构件包为oganization则国际化资源文件为

oganization_en_US.properties,oganization_zh_CN.properties。。。。等。 国际化的标识为 语种_国别。

语种使用ISO639-2(w3c) 国别 使用ISO3166(w3c) 2) Key的命名

1、 全局使用的消息名:

固定名称、标题、按钮显示名称:以l_开头加上英文单词

例如: 选择 l_choose

确定 l_comfirm 取消 l_cancle

字段名: 实体名.属性名

例如:AcOrganization.orgid

共61页 第33页

ABFrame系统设计开发规范

提示信息:以m_+”开头加上页面操作信息”+”_”+”消息名称”

例如:删除时的提示信息m_delete_confirm 图片名称:以i_开始加上英文单词 例如:i_logo

2、 局部使用的消息名(构件包、页面流、JSP内使用)

局部使用的消息名称可在全局使用的消息命名规范基础上,在消息名前增加”页面流名称”+”_”

如 选择:EmployeeManager._ l_choose

字段名: EmployeeManager._ AcOrganization.orgid 删除时的提示信息EmployeeManager._m_delete_confirm

7.2. 设计开发规范 7.2.1.构件包

1) 设计时,合理规划项目中构件包的粒度,一个构件包相当于一个业务模块,避免构件

包太大,影响业务的复用;避免构件包太细,导致项目构件包数量太多,不利于管理 2) 构件包在设计阶段由设计人员确定

3) 每个构件包对应一个与其名称一致的web路径 4)

7.2.2.逻辑构件

1) ABFrame项目的业务处理一律通过逻辑构件中的逻辑流实现

7.2.3.逻辑流

1) 要求逻辑流尽可能做到简洁功能独立,简洁是指所实现的逻辑流条理清晰、业务算法

简单易于理解,要求在熟悉EOS体系架构和已有构件(可能是EOS提供的,也可能是自身的积累)的基础上,选择最佳的算法实现;功能独立是指在一个逻辑流中的业务处理是独立的,复杂的逻辑流考虑细分为多个小的逻辑流,以提高逻辑流的复用度。例如,某个功能要求查询获得多个数据表的结果,在编写逻辑流时不建议将所有查询处理放到一个逻辑流中实现,而是在不同的逻辑流中实现,再通过页面流调用多个逻辑流,这样,编写的逻辑流可能还能在别的功能中得到复用,充分利用到面向构件积累的优势。

以下是某项目中页面流的截图,该逻辑响应用户界面上查询某次培训的详细资料(包括培训基本信息、培训的课程安排、参与培训的人员列表)的动作,对应信息的查询完全可以在一个逻辑流中实现,也可以分为三个逻辑流实现(如图所示),然后通过页面流分别调用,这样分别实现的三个逻辑流除了满足此功能外,还可以在培训课程查询、培训人员查询等功能中得到复用。

共61页 第34页

ABFrame系统设计开发规范

2) 编写的逻辑流要求以业务的语义描述每个处理环节(避免使用程序语义描述或者不描

述),即更改逻辑流中调用的运算逻辑的显示名称,同时逻辑图形编排清晰,尽可能不出现交叉线,另外可以在逻辑流中增加注释图元,注明逻辑流的功能等,这样有利于别人的阅读和理解,也方便日后系统的维护,以下是某项目中的逻辑流截图:

共61页 第35页

ABFrame系统设计开发规范

3) 注意逻辑流中调用的运算逻辑的返回值或抛出异常的情况,针对不同返回或异常可以

提供相应的处理,以保证应用的健壮性。

4) 充分合理利用已有的运算逻辑完成逻辑流的开发,以提高逻辑流处理的效率,以下为

常见的原则:

a) 处理数据库查询时,如果很确定需要查询哪些字段,建议使用查询指定字段的运算

逻辑,而不是查询所有字段的运算逻辑,尤其在相应表包含的字段数很多而且数据量很大的情况下更应遵循本原则; b) 在处理数据库查询时,对于具有海量数据表的操作要求进行谨慎查询处理,避免因

条件范围太宽导致返回数据过多,影响系统资源消耗;

c) 处理数据库查询时,如果直接使用sql处理查询,避免使用“select * from”语句,

建议明确指定查询字段,如“select a,b,c from ...”; d) 在处理迭代的情况时,如果迭代的次数非常大引起处理时间无法满足应用要求的响

应指标,应该考虑进行处理优化(如减少迭代过程中的处理环节等),或者将该部分的逻辑流处理通过运算逻辑实现。

e) 一般情况下,业务处理的逻辑不建议通过运算逻辑实现,但在某种特定情况下,从

平衡效率的角度,需要将业务处理逻辑通过运算逻辑实现,这需要依据经验根据实际情况确定。

f) 在逻辑流实现的处理步骤中,如果某些处理没有顺序上的区分,建议将产生数据量

共61页 第36页

ABFrame系统设计开发规范

大的处理放在靠后的步骤中,这样可以减少数据总线上数据的容量。例如,某个逻辑流实现查询订单的详细信息和订单的物品列表,这两个查询处理在逻辑上没有先后顺序,则建议将执行后产生的数据量大的处理放在后面处理,所以逻辑流实现时,先查询订单详细信息,再查询订单的物品列表。 g) 逻辑流中允许子逻辑流的嵌套调用,但嵌套的层次最好不要超过3层,否则对事务

处理的考虑变得比较复杂,而且嵌套层次太深,会影响执行效率。 h) 注释规范:功能简要说明,输入,输出,关键点说明,例如:

5) 关于逻辑流开发的限制

a) 如果遇到比较复杂的逻辑流,必须要及时和项目组技术负责人沟通讨论后再做决定

(主要是考虑到不同的实现有不同的性能)

b) 每一个逻辑流中必须要有相应的说明(通过使用注释图元,描述逻辑流的功能、数

据接口或者使用限制等等),使用业务术语说明这个逻辑流的业务功能,例如:

c) 多表查询的对策(按优先级排列): i. 建立EOS查询实体

共61页 第37页

ABFrame系统设计开发规范

ii. iii. iv. 建立数据库视图 建立命名Sql

在逻辑流中拼接SQL

6) 关于处理cra逻辑流

7) 代码字段如何获得对应的代码描述

在查询某些单表的记录时,存在某些代码字段,对应代码的描述存放在另一张业务表中(注意,如果代码是通过业务字典表定义的,不属于本案例的情况),例如,查询员工信息表的结果集中,员工记录中保存的是部门编号,部门编号对应的部门名称保存在部门表中,现在希望显示在页面上的员工信息显示部门名称。

【最优方案】类似这种情况,可以在逻辑流查询单表记录后,针对获得的查询结果,通过调用getCodeDescInEntityList,比较方便而且高效的获取代码字段对应的描述。而getCodeDescInEntity是处理与此类似情景的单条记录Entity的

适用场景:当单表中需要做类似处理的代码字段较少时(<=三个)适于用此方案

【次优方案】通过视图或者查询实体将主表和其他代码描述表关联起来进行查询,这样获得的查询结果中已经包含了代码的描述字段

适用场景:当查询的单表包含多个需要获取描述的代码字段时。

【低级方案】针对查询出的SDO数组进行迭代循环,获得每条记录的代码,然后去查询代码对应业务表中的业务描述。

适用场景:任何情况下绝对禁止采用此方案。

7.2.4.Java构件

ABFrame及相关项目不使用Java构件实现业务处理。

7.2.5.组合构件

ABFrame及相关项目,仅在涉及到系统间存在接口时,使用组合构件。

7.2.6.运算逻辑

1) 首要原则:运算逻辑的开发是受限的

项目组的成员不能随意增加运算逻辑,业务处理尽可能通过在逻辑流中复用已有的运算逻辑来组装,如果自己想增加一个运算逻辑需要和系统设计负责人及时沟通讨论后再做决定(这样做有利于业务与代码的分离,便于逻辑流未来的修改和维护,同时基于java代码实现的运算逻辑,可能会给系统带来诸多隐形的BUG,给系统的稳定运行造成隐患,也不利于系统的后期维护)。

2) 第二原则:尽管不提倡开发过多的运算逻辑,那么什么场景下需要开发运算逻辑呢:

a) 一些没有包含在已有构件库中的与业务无关的原子服务,由于当前项目使用的是

EOS6的试用版本,对于该类运算逻辑,要求由研发支持的接口人提供实现,并提

共61页 第38页

ABFrame系统设计开发规范

交给研发

b) 业务处理中需要调用外部系统或其他第三方产品的接口,需要将这些接口通过运

算逻辑进行封装,例如与第三方系统(如CAS)存在协议的接口处理、调用ESB的接口、调用LDAP认证的接口等等

c) 既有系统已经有一些基础处理的JAR包,其中提供的某些操作在EOS的运算逻辑

中没有,希望通过运算逻辑封装这些操作形成在EOS逻辑流中可以拖拽的运算逻辑(使用EOS6提供放入运算逻辑导入功能)

d) 系统中存在某些业务处理需要对大量业务数据进行汇总统计,或者针对一个很大的

查询结果(超过1000行以上)进行迭代处理,而迭代处理中涉及大量的操作。

3) 编写运算逻辑时,要求填写完整相应描述信息,包括运算逻辑的描述及参数的描述 4) 运算逻辑原则上建议不抛出异常,而是通过捕捉异常后设置返回值返回,异常信息可以

通过日志接口记录到日志文件中。如果抛出异常,要求能在构件对应的文档中明示抛出哪些异常,建议不要抛出基类异常。

5) 在运算逻辑中如果存在多处错误返回,应根据不同错误返回不同返回码(如-1、-2、

-3……),这样有助于进行错误定位。

6) 运算逻辑中有关调试、出错提示等,一律使用EOS平台发布的日志记录接口,详细用

法参见EOS6的日志接口文档。

7) 一般情况下,运算逻辑正常返回值为1;返回负值表示捕捉到异常或因数据不合要求导

致处理中断,需要进行分支处理;返回0或其他正数表示处理完成,但可能存在某些警告信息,例如用expandEntity查询指定条件的某条记录时,可能符合查询条件的记录有多行,则返回第一行记录,而返回值为记录行数。 8) 运算逻辑参数项设置原则:

a) 原则一:对于可以设置多组参数的运算逻辑,最后一个接口参数,在类型后面增

加…,表示在调用运算逻辑时,可以动态增加参数的个数,例如String…,Date… b) 原则二:不建议运算逻辑设置太多参数项(对于支持多组参数的除外),如果参数

项超过5个,建议充分利用SDO对象,通过Entity的节点方式处理,例如发送邮件的运算逻辑sendMail,将整个邮件信息(如发件人、收件人、抄送人、主题、内容、附件等等)放入一个SDO对象中以一个参数传入,而不是每项作为一个参数传入,在运算逻辑中通过取SDO对象的属性获得各项参数。

9) 运算逻辑是通过JAVA代码实现的,JAVA代码的编写请参考有关JAVA代码编写规范

的资料。

10) 关于运算逻辑中事务处理的建议:

建议在运算逻辑中尽量不使用事务处理,而是将事务的控制放到调用运算逻辑的逻辑流中(通过事务图元进行控制),这样避免因为运算逻辑和逻辑流中事务使用混乱导致出现事务一致性的问题。

注意事务中的数据库操作时间不要过长,因为事务会锁表,时间过长,别的连接对同一表操作会长时间等待,而且可能以为因为锁冲突导致死锁。本注意事项可能与上面的建议发生冲突,例如在运算逻辑中因为操作数据库比较多事务时间必然较长的时候,还是需要在运算逻辑处理事务。

11) 不要在运算逻辑方法中使用流,在datacontext尽量避免用流,防止未知异常导致流无法

正常关闭!(王克强的建议) 12) 关于运算逻辑中数据库操作的建议: 待补充……

13) 注释规范:功能简要说明,输入,输出,关键点说明,例如:

共61页 第39页

ABFrame系统设计开发规范

7.2.7.页面流

1) 编写的页面流要求以业务的语义表达每个处理环节(避免出现程序语义或者不描述),

同时逻辑图形编排清晰,尽可能不出现交叉线,另外要求在页面流中增加注释图元,注明页面流的功能等,这样有利于别人的阅读和理解,也方便的日后系统的维护,以下是某项目中的页面流截图:

2) 页面流的图形应该简单明了,如果一个页面流上面出现超过20个以上的图元(不包含开

始和结束图元),则需要考虑该逻辑是否应该优化,如判断是否处理繁琐冗余,是否可以变为多个页面流,是否调用的逻辑流粒度太细等。 3) 考虑逻辑流调用的返回值,针对非正常的返回要有统一的出错处理(如定位到统一的错

误页面等)

4) EOS6中支持在页面流中调用运算逻辑,为了项目中层次清晰,原则上不建议在页面流

中调用运算逻辑,尤其禁止在页面流中调用对数据产生更新的运算逻辑。而是将该类操作封装在逻辑流中,页面流调用逻辑流的方式 5) 页面流对于Session数据的处理原则:

a) SessionContext数据将在会话期间占用内存,只适合保存会话期间的全局数据,尽

可能避免在会话数据中存放过多数据量 b) 对于MUO对象,由于会自动复制到requestContext和bizContext,更加需要控制存

放的数据大小。

共61页 第40页

本文来源:https://www.bwwdw.com/article/3gd6.html

Top