Waf2技术框架设计0306.docx
- 文档编号:29457837
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:36
- 大小:286.89KB
Waf2技术框架设计0306.docx
《Waf2技术框架设计0306.docx》由会员分享,可在线阅读,更多相关《Waf2技术框架设计0306.docx(36页珍藏版)》请在冰豆网上搜索。
Waf2技术框架设计0306
Waf-2技术架构概要设计
版本
内容
作者
1.0
Waf-2技术架构概要设计
刘岳嘉
1.背景
WAF-1框架经过数年的发展,已积累几十家客户,在公司WEB应用开发领域作出了很大贡献。
但经过诸多项目的验证,问题还是反映频频,下图为客户调研结果:
根据调查结果,WAF框架的易用性、稳定性与性能问题表现突出。
市场有很大需求,但表现不够给力。
主要问题分析如下:
1.1.易用性
⏹BIM工具的支持
WAF本身基于AOM,无论从运行平台还是开发工具,都是AOM的一个子集,尤其是工具的开发支持方面相对还不够强大,如:
UI定义中对UI布局的支持,还有对HTML原生元素的支持(开发网页应用)方面还不够灵活,功能与与GUI相似,开发人员为了达到网页应用的效果需要手工调整xhtml页面,但工具反向无法解析。
⏹开发环境的配置与布署
开发环境目前需要一套稳定、统一的版本供开发人员使用。
⏹控件功能的欠缺与不稳定
开发人员在ManagerBean中进行控件的设值、状态改变及事件的捕获时,还存在或多或少的问题,如前段时间的树控件无法获取选取值、表格控件无法进行可编辑使能设值等。
开发人员常常为了实现某控件的功能,要往前端刷出Ext代码完成相应的工作;还有开发人员所需要使用的某些控件欠缺,如树表控件等。
⏹异常机制不够友好
开发人员在起初使用WAF开发应用时,经常会报出aom生命周期的错误或Ext的js脚本错误,开发人员难以调试。
⏹AOM支持问题
AOM是基于jsf框架的实现,jsf的生命周期过多,加之AOM对控件封装过严,导致开发人员难于调试跟踪且无法灵活控制。
1.1.稳定性
⏹控件不稳定
如前期经常反映的树状控件捕获的事件无法获取选中值等。
⏹WAF框架不稳定
补丁的输出并不能考虑到所有用户,经常为了解决某一用户的问题而影响到其它用户的正常使用;框架开发人员在框架开发过程中考虑的各版本兼容问题不足。
1.1.性能
●世华地产的性能问题
近期反映最严重的问题是世华地产,是由于客户端配置低,无法支撑起富客户端特性的应用。
●其它
在铁建项目AOM使用自有的数据结构对组件树进行的恢复操作。
AOM的事件交互以及组件同步依赖于服务器端维护的组件树,影响前后台交互性能;
种种问题表明,问题主要在AOM层面,框架过厚,易用性不强,控件功能欠缺,异常机制不友好,WEB服务器端在大并发量下负荷过重,前端EXTJS对客户端的要求较高,都无法承接EAS的要求,选择一套轻量级的控件势在必行。
2.技术框架蓝图及概要描述
WAF-2框架主要目标是轻量化,轻量化的框架有以下优点:
●易用性强
●性能保障
●学习成本低
●知识传播快
下图为WAF-2的技术架构图:
●视图层
前端视图层主要采用JSP进行描述,为了提升复用,采用JSP2.0中的TagDir方式开发可复用的基础控件与WEB组件。
●前端逻辑层
前端逻辑层采用SpringMVC作为核心技术引擎,进行用户的请求、响应、请求拦截等工作。
●后端服务层
后端服务层延续EAS的RPCService与ControllerBean层.
处理过程如下图:
浏览器发出请求,将请求数据以get/post方式进行追加或打包,提交至前端逻辑层Controller层。
在执行具体的请求方法前,要对请求进行一次拦截,主要用来进行权限验证、License及JavaScript对象与JAVA对象的转换操作,并进行远程对象注入,方便在Controller层调用后台。
几层拦截成功通过后,执行Controller层具体方法,访问后台,可直接利用在拦截器中注册的服务方法进行后端服务访问。
3.技术框架部件设计及描述
3.1视图层
●职责
视图层主要选用JSP2.0作为核心展现技术,为实现AJAX与更炫的效果,与方便开发人员掌握与使用,选用目前非常流行的JQuery作为JS库,控件方面要考虑风格统一与相对稳定,且功能稍强的JQueryUI作为基础控件库,并结合JQGrid与JSTree等树、表控件。
●交互
由于视图层与前端控制层的交互使用REST方式,即简单的请求响应,浏览器与前端逻辑层的交互数据格式采用标准化的JSON,所以WAF-2的视图层可与前端逻辑层(Controller层)完全解耦,以后升级至其它富客户端技术,HTML5等也变得非常容易。
模板技术方面,建议采用JSTL原生的模板技术,无论从稳定性,与将来的升级都有保证。
●控件
控件与WEB组件的封装采用JSP2.0中的TagDir方式,旧的类形式的TAG技术必须要继承TagSupport进行实现,开发难度提高,代码结构将变得模糊,所以在这里不建议使用JSP1.0中的Tag封装技术。
3.2前端逻辑层
●职责
主要负责处理视图层传递的请求,如保存,删除,审核,反审核,并调用远程接口进行后端服务的调用处理。
●状态
Waf-2采用Rest方式交互,只进行简单的请求与响应,不提倡使用Session状态,使用Session状态会增加Web服务器的负荷,并发性将不能保障。
●交互
视图层通过提交的Get/Post方式请求,将结合参数与提交内容发送请求至前端逻辑层,前端逻辑层通过远程接口调用后端服务后返回,并加以业务应用处理反馈至前端视图层。
3.3后端服务层
与GUI相同,在这里不作赘述。
4.Waf-2开发模型
4.1扩展模型
5.技术框架超类体系
本章主要对技术框架的超类体系进行描述,超类体系搭建的目标要符合:
易扩展
开放性好
层次清晰
拒绝深度继承
易理解
易调试
5.1功能划分
⏹com.kingdee.bos.waf2.view.core
描述:
基础框架的核心超类.(最高超类)
⏹com.kingdee.bos.waf2.annotation
描述:
为方便开发人员开发,为waf2加入的注解,如注入服务等功能.
⏹com.kingdee.bos.waf2.constant
描述:
waf2的常量类包.
⏹com.kingdee.bos.waf2.util
描述:
waf2的工具类
⏹com.kingdee.bos.waf2.interceptor
描述:
waf2的拦截器
⏹com.kingdee.bos.waf2.filter
描述:
waf2的web请求过滤器.
⏹com.kingdee.bos.waf2.json
描述:
waf2的json转换处理类
⏹com.kingdee.bos.waf2.template
描述:
waf2提供的通用模板
⏹ponent
描述:
waf2提供的通用WEB组件。
⏹com.kingdee.bos.waf2.exception
描述:
waf2的系统与业务异常
5.2基础框架核心超类
5.2基础框架注释类
5.4基础框架常量类
5.5基础框架工具类
5.6基础框架拦截器
5.7基础框架过滤器
5.8基础框架异常类
5.9基础框架json处理类
5.10基础框架通用模板类
●基础资料类
●单据类
5.11基础框架通用组件类
5.12JS核心超类
WAF.JS是所有页面JS类的最高超类,主要用来描述各种通用的方法,帮助开发人员在自己的页面JS类中方便调用。
模板方法中已描述的方法在子类中无需实现,如需覆盖,只需重新声明当前类的prototype方法即可.
6.系统服务
系统服务主要系统级架构服务进行描述,具体包括如下几部分:
●日志
●权限
●License
●国际化
●HTTP缓存
●后台远程对象调用服务
6.1日志
日志采用Log4J,具体实现也比较简单,只需要在引用到日志的类中加一句:
protectedLoggerlogger=Logger.getLogger(this.getClass);
即可。
6.2权限
6.3License
6.4国际化
国际化方面由于EAS的原始规范中,将Java源码与相关的多语种资源生成在一起,waf-2也要延用这种规范,一个Controller对应多个相应的国际化资源。
但问题出在SpringMVC对国际化方面的支持只能通过单独的配置文件进行设置,如下:
这样的话,BIM必须每次生成后要维护springmvc的messageSource中的basename属性,此点为SpringMVC没有规范的一点。
Waf-2建议采用原生的i18n规范,如下:
<%@tagliburi="http:
//jakarta.apache.org/taglibs/i18n-1.0"prefix="i18n"%>
bundlebaseName="com.kingdee.demo.TestController"id="bundle"localeRef="WafLocale"scope="session"/> messagekey="page.title"/> <%@taglib…%>将i18n的标签库引入当前页面。 bundle…./>将当前页面的国际化资源文件与当前页面绑定 messagekey=”page.title”/>从当前页面绑定的国际化资源文件中获得对应的显示值。 6.5HTTP缓存 HTTP缓存采用httpfilter来实现,如果是.do的请求,则在头文件中加入no-cache=true的处理。 代码如下: httpResponse.setHeader("Pragma","no-cache"); httpResponse.addHeader("Cache-Control","must-revalidate"); httpResponse.addHeader("Cache-Control","no-cache"); httpResponse.addHeader("Cache-Control","no-store"); httpResponse.setDateHeader("Expires",0); 6.6后台远程对象调用服务 后台远程对象调用服务为方便开发人员获得远程对象调用接口,采用服务注入方式,开发人员直接引用对象调用即可。 /* *远程BO对象 */ @IBOSBizCtrl IFareExpenseAccountfareExpenseAccount; 7.编程模型及代码结构 8.组件对象模型 8.1WEB组件的规范 开发人员在开发组件时也要遵循WEB组件开发的一些规约。 原则上讲,组件与页面类似,他们都有经历初始化与销毁的生命周期过程,并且都拥有metaDataPK,UIContext,Context等属性,但他们有一个本质的区别: ⏹页面是与客户直接交互的最基本的单元,它可以独立存在。 ⏹组件只是为了组合页面为存在的页面元素,它不可以独立运行。 页面必须要实现的接口为IWebBean;WEB组件必须要实现的接口为IWebComponentBean 具体的简要类图如下: 8.2WEB框架核心组件列表 ●列表组件 提供普通列表式CRUD维护组件。 ●树组件 提供普通层次类(树型)CRUD维护组件。 ●查询组件 提供查询方案组件,主要用来查询列表。 ●BOTP组件 提供BOTP常用服务组件。 ●工作流组件 提供工作流常用服务接口组件。 ●审核组件 为基础资料或单据提供审核与反审核服务接口的组件。 ●多组织切换组件 为当前业务单元提供多组织切换组件。 ●共享隔离组件 为当前基础资料提供分配策略等相关服务组件。 ●数据导航组件 为当前业务单元提供定位操作。 ●启用/禁用组件 为当前基础资料或单据提供启用禁用操作组件。 ●批量编辑组件 为当前基础资料或单据提供批量编辑组件,主要以列表方式提供。 ●快捷查询组件 为当前基础资料或单据提供快捷查询的组件。 ●常用查询组件 为当前基础资料或单据提供浮动式的常用查询组件。 8.3WEB组件的详细描述 下面针对一期WEB框架提供的核心组件进行详细描述: 8.3.1列表组件 英文名称: ViewGrid 中文名称: 列表维护组件,表格本身只能显示,不能编辑修改。 描述: 列表组件 类型: UI组件 包名: ponent 子组件: 表格Grid 父组件: 无 组件属性集合: 名称 类型 说明 设计期 Id String 组件ID 是 Jsvar String 前端组件的Javascript变量 是 Owner IWebElement 父项窗体句柄 否 nativeTable TableComponent 获取此复合组件的实体组件 是 Binding String(EL表达式) IOVC,绑定的MB的组件对象 是 merged Boolean 合并单元格 是 toolbarPosition Position 工具栏处于表格的位置 是 showRowNumber Boolean 是否显示序号列 是 singleSelection Boolean 是否只允许单选 是 strapRow Boolean 是否允许表元自动换行 是 editUIContent Element EditUI在界面中的元素容器名称(不指定则以模态窗体弹出) 是 lockColumns Int 锁定列数 是 editURL String 用于定位编辑界面的位置。 是 Query QueryInfo 用来作查询使用 是 功能集合: 名称 说明 新增(AddAction) 新增时编辑界面以模式窗口打开一个窗口。 修改(UpdateAction) 和新增类似,但是需要接受ID参数,运行期传递 删除(RemoveAction) 支持单个删除和批量删除,给予提示是否删除删除 查看(viewAction) 查看界面操作 刷新(RefreshAction) 支持刷新 打印(printAction) 打印 可扩展事件: 名称 说明 新增 AddActionEvent 修改 UpdateActionEvent 删除 RemoveActionEvent 刷新 RefreshActionEvent 表格双击 DBLTableSelectEvent 表格单击 TableSelectEvent 依赖组件: 无 版本信息: 1.0-SNAPSHOT 输出信息: @CurrentTableID: 当前选择的ID @CurrentTableRows: 当前选择的Rows 业务特征描述: 其它: 8.3.2树组件 英文名称: tree(viewTree) 中文名称: 树维护组件,主要用来进行层次结构数据的维护,与分组结构的分组信息。 描述: 树组件 类型: UI组件 包名: ponent 子组件: 树tree 父组件: 无 属性集合: 名称 类型 说明 设计期 Id String 组件ID 是 Jsvar String 前端组件的Javascript变量 是 Owner IWebBean 父项窗体句柄 否 nativeTree TreeComponent 获取此复合组件的实体组件 是 Binding String(EL表达式) IOVC,绑定的MB的组件对象 是 rootVisible Boolean 是否显示根节点 是 loadAllNodes Boolean 是否一次读取所有级别节点(性能问题) 是 EditURL String 编辑界面路径 是 Query QueryInfo 查询对象 是 功能集合: 名称 说明 新增(AddAction) 新增时编辑界面以模式窗口打开一个窗口。 修改(UpdateAction) 和新增类似,但是需要接受ID参数,运行期传递 删除(RemoveAction) 支持单个删除和批量删除,给予提示是否删除删除 定位(locationAction) 只支持前端定位遍历操作 刷新(RefreshAction) 支持刷新 上移(moveUpAction) 上移操作,主要用来调整节点顺序 下移(moveDownAction) 下移操作,主要和来调整节点顺序 移动(moveAction) 移动操作,可以移动到任意一个节点下 可扩展事件: 名称 说明 新增 AddActionEvent 修改 UpdateActionEvent 删除 RemoveActionEvent 刷新 RefreshActionEvent 表格双击 DBLTableSelectEvent 表格单击 TableSelectEvent 依赖组件: 无 版本信息: 1.0-SNAPSHOT 业务特征描述: 8.3.3高级查询组件 英文名称: query(queryBean) 中文名称: 通用过滤维护组件,主要用来对数据进行查询过滤操作。 描述: 查询组件 类型: 服务组件 包名: ponent 子组件: 父组件: 无 属性/参数集合: 名称 类型 说明 设计期 id String 组件ID 是 owner IWebBean 父项窗体句柄 否 query QueryInfo 查询对象 是 功能集合: 名称 说明 查询(queryAction) 支持快速查询,通过某些列进行快速查询 可扩展事件: 名称 说明 查询执行事件 queryActionEvent 依赖组件: 无 版本信息: 1.0-SNAPSHOT 业务特征描述: 8.3.4BOTP组件 英文名称: botp(botpBean) 中文名称: BOTP组件 描述: 提供单据的转换服务,主要包括上推、下推、上查、下查操作. 类型: 服务组件 包名: ponent 子组件: 父组件: 无 属性/参数集合: 名称 类型 说明 设计期 id String 组件ID 是 owner IWebBean 父项窗体句柄 否 botpSrcBillInfo CoreBillBaseInfo 源单据 否 功能集合: 名称 说明 上拉(createVoucherAction) BOTP上拉操作 下推(createToAction) BOTP下推操作 上查(traceUpAction) BOTP上查操作 下查(traceDownAction) BOTP下查操作 可扩展事件: 名称 说明 上拉(createVoucherActionEvent) BOTP上拉操作 下推(createToActionEvent) BOTP下推操作 上查(traceUpActionEvent) BOTP上查操作 下查(traceDownActionEvent) BOTP下查操作 依赖组件: 无 版本信息: 1.0-SNAPSHOT 业务特征描述: 8.3.5工作流组件 英文名称: workFlow(workFlowBean) 中文名称: WorkFlow组件 描述: 提供工作流相关服务 类型: 服务组件 包名: ponent 子组件: 父组件: 无 属性/参数集合: 名称 类型 说明 设计期 Id String 组件ID 是 Owner IWebBean 父项窗体句柄 否 billID String 单据ID 否 功能集合: 名称 说明 viewProcessAction 查看流程图 viewOpinionAction 查看审批意见 multiApproveAction 执行多级审批 viewActivityListAction 查看业务流程列表 specifyNextPersonAction 指定下一步参与人 可扩展事件: 名称 说明 viewProcessActionEvent 查看流程图 viewOpinionActionEvent 查看审批意见 multiApproveActionEvent 执行多级审批 viewActivityListActionEvent 查看业务流程列表 specifyNextPersonActionEvent 指定下一步参与人 依赖组件: 无 版本信息: 1.0-SNAPSHOT 业务特征描述: 8.3.6审核组件 英文名称: audit(AuditBean) 中文名称: 审核组件 描述: 提供审核服务 类型: 服务组件 包名: ponent 子组件: 父组件: 无 属性/参数集合: 名称 类型 说明 设计期 Id String 组件ID 是 Owner IWebBean 父项窗体句柄 否 auditField int 待审核/反审核属性(提供常量) 是 auditEntityInfos CoreBaseCollection 待审核/反审核的对象集合 否 功能集合: 名称 说明 auditAction 审核 unAuditAction 反审核 可扩展事件: 名称 说明 auditActionEvent 审核操作完毕后抛出的事件 unAuditActionEvent 反审核操作完毕后抛出的事件 依赖组件: 无 版本信息: 1.0-SNAPSHOT 8.3.7多组织切换组件 英文名称: orgSwitchBean(orgSwitchBean) 中文名称: 多组织切换组件 描述: 提供多组织切换组件 类型: 服务组件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Waf2 技术 框架 设计 0306