EWA DEMO emp-script emp-script-utils emp-script-static ffmpeg-utils weixin

系统说明

2016-05-19

一、概述

EWA(Easy Web Application)系统是一套用于开发基于B/S架构的应用系统的开发平台,EWA系统的目标是:关注业务逻辑,关注数据库设计,缩短项目中UI开发周期,迅速跟随需求变更,组件复用性高。

  1. 快速成型,无需硬编码,向导方式生成,保证菜鸟工程师每天完成10个页面。
  2. 快速部署,生成即部署,无编译。
  3. 快速修改,就是要快,跟随需求变更。
  4. 低量编码,及对核心业务逻辑编码,并提供辅助编码工具。
  5. 高效执行,减少不必要开销,针对核心应用简单编码。合理使用缓存。
  6. 高复用性,组件生成和导入,适应不同类型数据库。
  7. 远程协同,BS架构IDE,跨域协同。
  8. 多语种支持,支持多国语种。
  9. 高兼容性,跨平台、数据库、浏览器。

1. 系统由来

在经历数十个大大小小的项目后万分困惑,在如何平衡开发成本、进度和质量和需求变更这四方面的关系心力憔悴。一个典型B/S应用系统项目,如CRM,OA,SCM等,在系统开发过程中,大量的时间被应用于页面合成上面,虽然有一些MVC的中间件的应用,但是还是感觉到低技术水准的编码和测试占了整个开发过程中的60%-80%的时间,这些包括如HTML代码的合成,页面单元的测试,数据验证和页面显示效果,浏览器的兼容性,用户没完没了的需求变更等。同时该部分工作又是开发工程师的恶魔,同时也是项目管理中的恶魔。典型问题包括:

一致性要求

显示效果,显示细节。框架显示方式,修改删除的操作方式等。对菜鸟说太难了。

浏览器兼容

在不同的浏览器上显示效果一致。资深程序员能快速解决。

需求不断变更

不存在完美需求,项目实施过程中就是不断变化,最简单和最普遍的变化是,我们要增加一个字段放某个信息,我们需要增加一种报表。没完没了。指望合同中约束?门都没有。 我们现实的问题是实体对象都映射好了,需要重新映射,页面重新修改,配置文件修改等。协调程序员编码,修改,重新编译,测试然后在客户服务器上部署。一天算是快的。问题解决了吗,不!过几天又来了,还是要增加信息。协调工作又要重来一遍。 我们的愿望既然不能改变客户,我们能改变什么?30分钟能否完成这个需求变更。

2. 针对80%下手

在典型的应用系统中,核心业务逻辑部分只占项目整体部分的10%-20%左右,大部分的工作是较为简单的数据录入、修改、删除和查询(包括多表和汇总)。对于复杂的业务逻辑部分的设计必须采用硬编码的方式进行,从而保证业务逻辑的完整性。 但对简单的部分如果还是采用硬编码(即使使用代码生成器)并合成为HTML,这样低技术水准的工作会大大延长开发的时间。
如果缩短80%部分的开发周期,那么成本和需求变更的问题就会迎刃而解,同时也解放了工程师的时间,使其将主要精力放到数据库架构设计和核心业务逻辑上,从而保证了项目的质量。

3.解决思路

无需编译代码

通过配置文件描述业务系统,需求变更只需修改文件即可。不需要重新编译代码工作。

简单使用

配套工具能够简单使用,保证实施工程师(菜鸟级)会使用。

远程修改及部署

B/S架构IDE,可在浏览器上生成修改应用系统,保证远程协同开发。

二、系统结构

1.系统结构

EWA系统结构分为,配置解析器,UI合成器,数据解析器三个部分组成。参见“系统结构图”

 
(系统结构)

2. 配置解析器(EWA Configure Parser)

配置解析器用于解析XML配置文件,根据Frame类型加载各参数,包括UI,SQL及逻辑部分。配置文件一旦加载就会放入Cache中,从而加快响应速度。如果配置文件被修改,配置解析器会自动重新加载。

3. UI合成器(EWA UI Generation)

UI合成器是根据XML配置文件的描述自动生成HTML代码及脚本或XML文件。三种类型的HTML支持的浏览器包括IE和FF,OPERA,Safari。同时HTML符合XHTML的要求。

4. 数据解析器(EWA Data Parser)

数据解析器是用于数据交换,可和数据库系统,XML文件,类,Web Service,JSON等进行数据交换。 系统根据不同的XML配置文件和类型,自动生成诸如分页SQL,子查询SQL等,同时系统会自动将参数(QueryString,Form,Session,Cookie)进行合成,用户不必关系过程。 数据调用的过程中,会根据定义的简单逻辑进行操作。

三、系统运行过程

system-flow

(基本流程图)

1. 初始化

将Form,Query,Session,Cookies参数信息加载到系统中,同时获取XMLNAME(配置文件)和 ITEMNAME(配置项)信息。同时获取UI合成的行为参数:

参数 描述 是否必须
XMLNAME 配置文件
ITEMNAME 配置项
EWA_LANG 语言(zhcn/enus对应中文与英文)
EWA_AJAX 是否AJAX调用
EWA_ACTION 需执行的ACTION

2. 解析配置

系统首先根据XMLNAME和ITEMNAME在缓存中查询,如果存在则通过缓存中获取,如果不存在则解析配置并放入到缓存中,便于下次调用。 缓存机制是间隔5秒查询配置文件是否改变,如果改变,则清除配置。

3. 权限校验

根据配置信息执行权限校验,如果未定义,则忽略并继续执行。否则执行权限校验类,如果不通过,则终止执行并返回跳转到指定的错误页面,并停止运行。 权限校验是用户指定的通过IAcl接口编写的类。

4. 执行ACTION

根据配置文件执行ACTION,执行的方式目前分为五种,分为SQL调用,Class调用,Xml调用,Url调用,Javascript调用。ACTION调用支持简单逻辑判断,根据判断的true或false进行分支运行。在ACTION中可指定或清除session和cookies值,用于保持/清除状态。

方式 说明 执行方式
SQL 对数据库的调用,通过Datasource指定的数据源。在EwaConnections.xml中定义。执行调用Web的数据库连接池。支持查询,更新和存储过程。 系统
Class 通过反射执行执行类的方法。根据返回数据填写数据。返回值若为HashMap,List,类,数据解析器会根据对象的方法映射到DTTable表中。返回值若为字符串,则首先通过“&”分割字符串,然后通过“=”分割子串,[0]为字段名,[1]为值。例如:name=master&age=23&id=12,结果是三个字段分别为name,age,id,值为master,23,12 系统
Xml 调用XML文件,进行新增,删除,查询操作。可采用属性或Node Value方式进行数据操作 系统
Url 跳转页面 页面
Javascript 执行脚本 页面

5.数据映射

数据映射到自定义的DTTable类中,涉及类包括DTColumn,DTRow,DTCell,DTIndex等对象。 数据映射是将ACTION执行后的返回值映射到DTTable中进行统一调用,这样避免对不同类型的ACTION编写不同的代码,同时便于快速扩展ACTION种类。 数据映射目前完成有三种映射:

1、 SQL映射

对执行返回的结果集进行映射,提取字段和字段值放入DTTable中。

2、 XML映射

根据定义将XML文件映射到DTTable中,基本思路是根据Path首先提取NodeList集合,然后对NodeList进行循环操作,将每个Node的属性或NodeValue放入到数据表中。自动判别CDATA类型。

3、 类映射

根据返回的类进行映射,基本思路是:

  • 如果是Map或List对象,首先进行循环操作,提取对象包含的子对象,并对子对象中所有get模式方法进行映射,方法名作为字段名,返回值作为字段值映射到DTTable中。
  • 如果是普通类,对子对象中所有get模式方法进行映射,方法名作为字段名,返回值作为字段值映射到DTTable中。
  • 如果是字符类,则首先通过“&”分割字符串,然后通过“=”分割子串,位置[0]为字段名,位置[1]为值。例如:name=master&age=23&id=12,结果是三个字段分别为name,age,id,值为master,23,12。

6. 合成页面

页面的合成是通过配置文件指定的显示模式和XItem项的定义在页面显示,显示内容根据模板定义显示。目前支持列表、新增修改、菜单、树、多维列表、复合页面六种类型。同时根据指定的参数(EWA_AJAX)输出HTML页面,JSON,XML对象等。

7. 写日志

根据定义的日志内容输出日志。自定义类根据ILog接口派生。

8. 错误捕捉

在运行过程中出现错误,如果是本地调用,会在页面显示错误信息和执行顺序信息,如果是远程调用,则会转向错误页面,错误页面配置在web.xml中的servlet中进行配置。