基于三层架构的映射方法研究

2015-10-31 11:03穆仕华陈月英
中国科技纵横 2015年15期
关键词:代码生成伪码表达式

穆仕华 陈月英

(1.贵州省科技信息中心,贵州贵阳 550002;2.贵州省信息技术创新服务中心,贵州贵阳 550002)

基于三层架构的映射方法研究

穆仕华1陈月英2

(1.贵州省科技信息中心,贵州贵阳550002;2.贵州省信息技术创新服务中心,贵州贵阳550002)

传统的三层架具有层次清晰、任务明确的特点,但软件的设计和编码也涉及到三个层次,不同层次涉及到不同的开发语言、工具和方法,使得软件的设计、编码、测试和维护困难,软件开发效率和质量难以保障。本文通过对三层架构映射模型的建立,采用规则引擎、组件引擎、代码生成技术和组件解析技术实现了一层到三层的映射,在保留三层架构优点的基础上,简化了软件设计和开发的难度,提高了软件开发的效率和质量。

三层架构映射方法组件引擎规则引擎代码生成

三层架构是指在客户端浏览器与后台数据库间加入了一个可称为组件层的中间层。组件层分为业务逻辑层BLL、数据访问层DAL、数据对象模型层Model[1]。三层架构的优点是层次清晰,提高了系统设计的灵活性、可扩展性和可维护性。但是,从三层架构的各层来看,具有涉及的开发语言多、开发工具多的特点:(1)表示层的设计复杂。在表示层,需要对用户界面进行设计,界面是实现人机友好交互的接口,界面的友好性对用户体验有直接影响[2]。WEB表示层的设计涉及页面布局、图片处理、人机会话等技术,这些技术需要多种工具和语言来完成,如Photoshop、html、div、js等,不同内核的浏览器在表示层存在较大的兼容性问题,导致同样的界面在不同浏览器中的表现形式不一致,甚至部分功能失效。(2)业务逻辑层的实现复杂。在业务逻辑层,通过对业务逻辑的封装,对表示层进行隐藏实现,表示层通过调用业务逻辑层的接口来实现各种操作。业务逻辑层是表示层和数据访问层的纽带,需要处理各种复杂的算法实现问题。实现业务逻辑层的语言有VB、C#、JAVA等,不同语言的开发环境、语法格式、基础类库等差异较大,开发过程中需要进行大量的编码工作。(3)数据访问层的差异较大。在数据访问层,需要解决不同数据库的存取问题,不同类型的数据库在连接方法、数据类型、SQL查询语句、存储过程、用户自定义函数的语法格式方面存在差异,这些差异需要技术人员在开始过程中查阅相关的帮助文档才能解决,消耗了大量的时间和精力。

1 三层架构技术比较

1.1MVC

MVC在开发复杂的大型网站时,能将不同的功能作切割,提高程序代码的可读性,以及组件的可重用性。MVC纵向切割了开发过程中的代码,从服务器到浏览器层层分离。层次之间耦合度很低。但MVC无法封装,所以无法被重用[3]。

1.2MVP

MVP演变自MVC,通过表示器将视图与模型巧妙地分开。在该模式中,视图通常由表示器初始化,它呈现用户界面(UI)并接受用户所发出命令,但不对用户的输入作任何逻辑处理,而仅仅是将用户输入转发给表示器[4]。

1.3WPF

WPF涵盖了桌面应用程序开发、网络应用程序开发和移动应用程序开发,是微软开发技术未来十年的主要方向。WPF基于DirectX底层接口,带来优秀的图形向量渲染引擎,因此相对于上一代GDI/ GDI+编程模型有了质的飞跃,可以轻松实现2D/3D绚丽效果,比如半透明、图形翻转、平移、缩放等[5]。

2 映射模型设计

通过对三层架构常见模式的优缺点进行比较,提出三层架构的映射模型,如图1所示。

2.1伪码文档

伪码文档是一个二维表结构,其行列结构可通过代码生成器的算法转化为HTML代码。在伪码文档的单元格中,通过规则表达式描述各单元格中的组件类型、组件属性以及组件的数据接口。按照组件引擎和规则引擎的约定,在伪码文档中还可描述数据库的表结构、表间关系、业务流程及用户权限。

2.2组件引擎

组件引擎是由表单、数据列表、报表、业务流程、图文、视频等具有通用性的组件组成的组件库,其底层实现细节通过JAVA、C#等支持面向对象的WEB开发语言实现。组件引擎除包含常见的组件外,还可根据其提供的标准和统一接口进行组件扩展,组件的标准接口包括组件ID、组件类型、数据库类型、可编程性数据接口、界面描述、外部文件引入路径,在此基础上,可扩展新加入组件的其他属性。

2.3规则引擎

2.3.1表结构描述规则

(1)表结构描述规则。关系数据库的表结构通过“TableName={字类名$字段类型$字段长度$验证方式$字段说明}”的方式进行描述,字段的验证方式是指对字段对应的控件在接收用户输入的数据时进行的有效性验证,常见的验证方式包括身份证号、电话、邮编、电子邮箱、整数、小数、日期、时间等,用其对应的英文名作为伪码描述。

(2)表间关系描述规则。表单关系包括1对1,1对多和多对多关系,通过规则表达式“{表x->字段1orn=表y->字段1orn}”进行描述。若同一表与多表之间存在关系,则可通过编写多个表间关系表达式进行描述。

2.3.2组件描述规则

组件描述通过规则表达式“Component=组件ID$组件类型$属性集合”进行描述,属性集合以“{属性ID=属性值},{属性ID=属性值}”的方式描述组件的多个属性。

由于组件在实现业务功能时可能需要引入一些外部文件作为支撑,因此,对于文件的引入规则采用“<FileType=文件类型Path=文件路径”进行描述。文件类型JS、CSS、Image三种。

2.3.3参数描述规则

图1 三层架构映射模型

图2 代码生成器的工作流程

在规则引擎中还需制定各种参数的传递和接收方法,WEB应用中的参数传递方式主要包括Post、Get,Session和Cookie三种,对于Post和Get,其伪码表达式为“参数变量=request.参数名”,Session和Cookie则分别为“参数变量=Cookie.参数名”和“参数变量=Session.参数名”。

2.4代码生成器

代码生成器的作用是将伪码文档转换成组件的XML配置文档及相关的文件。代码生成器的工作流程为导入伪码文档,对伪码文档的类型进行判断,若伪码文档为表结构伪码,则通过SQL代码生成器生成特定关系数据库的SQL建表脚本和用于实现数据增加、删除和修改的脚本。若伪码文档是组件结构,则根据组件的结构生成HTML、CSS、JS文件和组件的XML配置文档。代码生成器的工作流程如图2所示。

2.5组件解析器

组件解析器的作用是将组件的XML文档转换成WEB应用程序。组件解析器的工作流程是对代码生成器生成的XML文档进行加载,并根据组件的参数描述从外部获取session、post等方式传递的参数,与此同时,调用一个通用数据接口获取关系数据库中的数据并创建组件,组件创建完毕后,根据组件的HTML界面布局呈现组件。

3 映射模型实现

映射模型实现的关键是通过各种算法对伪码文档进行解析,以生成组件的XML配置文档,而组件的XML配置文档中包含了组件的属性描述、界面描述、数据接口描述,XML配置文档是组件解析器将其转换为WEB应用的基础,因此映射模型需要对代码生成算法和组件解析算法进行实现。

3.1代码生成算法

三层架构映射模型的关键是实现HTML、JS、XML和SQL的代码生成,各种代码的生成原理和方法差异较大。

3.1.1HTML生成算法

HTML生成算法根据伪码文档描述的二维表结构生成WEB应用程序的界面布局,其算法的关键步骤如下:

(1)遍历二维表的所有行和列,开始遍历前生成“<table>”标签;(2)读取每一个单元格式的值,如果不为空,产生一个“<td><td>”标识,如果为空,并入其左侧的单元格;(3)如果某一单元格的下方存在空单元格,则将其合并;(4)所有单元格遍历结束生成“</table>”标签。

3.1.2JS生成算法

JS代码用于实现数据的验证、在前端实现计算等,其代码生成算法的关键步骤如下:(1)根据组件的描述规则引入JS文件;2)如果组件涉及函数库的调用,则将调用函数库所需的相关参数转换为接收到的实际参数;(3)对于表单组件,若发现算法运算或逻辑运算表达式,则采用二叉树的遍历算法遍历整个表达式,以获取表达式中的控件ID,同时调用JQuery函数库中的组件选择器获取特定控件的值,并将整个表达式转换为条件表达式,以实现对表单中相关数据的验证。

3.1.3XML生成算法

XML生成算法将伪码文档的整体结构生成一个XML文档,并将伪码文档中描述的组件作为XML文档的子节点。XML生成算法的关键步骤如下:(1)遍历二维表的所有行和列,开始遍历前生成“<Page>”根节点;(2)读取每一个单元格式的值,如果找到Component标识,则获取组件的类型,根据组件的结构为伪码文档的描述生成组件和XML描述文档,同时作为“<Page>”根节点的子节点;(3)遍历完成后,生成”</Page>”结束标签。

3.1.4SQL生成算法

SQL生成算法将伪码文档中描述数据库表结构的伪码生成为数据库的建表脚本,同时根据伪码文档中描述的组件接口的需要,生成相应的数据处理脚本,其关键的代码生成步骤如下:(1)遍历二维表的所有行和列,若发现“TableName”标签,则说明是一个数据为表结构相关的伪码描述;(2)获取每一个单元格的值,拆分伪码表达式以获取字段名、字段类型、长度和备注信息,存入数组;(3)遍历结束后,判断当前选用的关键数据库类型,调用特定关系数据库的建表方法生成数据库表结构;(4)遍历描述组件的伪码文档,根据组件的数据接口需求生成特定的数据处理脚本。

3.2组件解析算法

组件解析算法根据组件的XML文档生成WEB应用程序,组件解析算法以组件的XML文档为基础,从XML文档的根节点开始对整个XML文档进行遍历,当读取到组件类型标签时,首先创建一个组件实例,同时从XML文档获取组件的其他参数对组件实例的接口进行配置。单个组件创建完成后,根据XML文档中提供的界面布局对各组件进行呈现。组件呈现时,如果需获取相关参数、设置组件的初始值,则根据规则表达式对参数进行解析,通过通用的数据接口获取组件的数据源,调用其数据接口代码获取数据源中的数据,并绑定到组件中。

4 结语

基于三层架构的映射技术在建立三层架构映射技术的基础上,以组件引擎为基础,通过自定义的规则表达式对组件进行描述,形成伪码文档,实现了界面层、业务逻辑层和数据访问层的设计通过一个文档完成。在构建伪码文档的基础上,通过代码生成器将伪码文档转化为组件的XML配置文档,组件解析器将XML配置文档转换成WEB应用程序,从实现了通过XML代码文档向三层代码的映射关系,简化了软件设计的过程,改变了WEB应用软件代码编写的方式,从而提高了软件的开发效率和质量。

[1]张士敏.ASP.NET的三层架构与实现[J].硅谷,2013,(第4期).

[2]HOU Yan'e,DANG Lanxue,WEI Dan.Design and implementation of web user interface automatic generation tool[J].Journal of Henan University(Natural Science),2011,41(6):641-644.

[3]张志刚.基于ASP.NET MVC框架的研究[J].计算机光盘软件与应用,2014,(第18期).

[4]王念桥.应用MVP模式改进软件架构[J].计算机时代,2012,(第4期).

[5]王婵娟.浅谈WPF架构及其应用[J].科技信息,2011,(第21期).

猜你喜欢
代码生成伪码表达式
非协作多用户短码直扩信号伪码估计
一个混合核Hilbert型积分不等式及其算子范数表达式
Lustre语言可信代码生成器研究进展
表达式转换及求值探析
浅析C语言运算符及表达式的教学误区
代码生成技术在软件开发中的应用
基于XML的代码自动生成工具
伪码体制脉冲串引信信号参数提取方法
非等量采样伪码跟踪环建模分析
猝发式直扩系统伪码同步技术的FPGA实现