|
|
在”使用XML封装数据库操作语句的实现”之中曾说过使用XML封装数据库语句的实现目的是为了让代码更简洁,更工整,但对于网站开发人员来说,当然希望是更方便,更容易实现交易的了,如何结合XML实现编程很少,而且很快速的完成交易呢? 我想大家对这个问题的答案会各种各样,个有己见,可能有人会说使用struts简单,有人会说使用EJB简单,也许也有人会说直接使用JSP调用数据库实现最直接……这些实现方法都个有所长,但不是我今天的议题, 这篇文章将融合这几年开发网站的感想和一些我自己对网站构架的理解详细描述使用XML实现网站构架的方法。
一.构架 首先请大家看一下图片(不好意思,临时在Rose中截取了一张图片,画的不好,望包涵)
 点击放大 图一 网站构架发展到现在都讲求MVC的思想,我的这个构架同样也无法抛离这样优秀的思想,如上图显示,构架划分为View-Logic Controller-Data Controller三层,普通程序员在这个构架上需要做的事情有:
1) 编写Parameter.xml(图中绿色模块)文件,这个文件记录需要上传的参数 2) 如果需要特速交易的需要按照规范来编写Checking Class(图中红色模块)【此步骤可选】 3) 编写iartbean(见XML封装数据库一文)操作的数据库交易Transaction.xml(图中绿色模块)文件 4) 返回为JSP编写JSP,返回为XML编写XSLT,WAP则写WML(图中红色模块)
二.文件描述 我们还是从Parameter.xml文件入手逐渐展开介绍更个构架。以(XML封装数据库一文中)2)selectUserByKey的显示用户为例,
Parameter.xml需要编写为: <trans name=" selectUserByKey " method="select"> <property name="userid" type="long" check=”isNum(8)”/> </trans> 对于根据用户的ID来读取数据库相应的用户信息,这里编写的trans 节点的name是和 iartbean里定义的数据库交易文件的dbtrans节点的name 是一样的,统一的交易名称是实现交易唯一的最简单办法。 同样<property>节点表示的是数据项,userid是从browser上传的数据, check属性表示使用何种方法来检查数据。
本例子没有特殊的检查和处理,所以不介绍Checking Class的编写
对应的数据库交易描述 1. <dbtrans name=”selectUserByKey” table=”TBL_USER” method=”select”> 2. <key> 3 <property name=”userid” type=”long”/> 4 </key> 5 <get> 6 <property name=”username” type=”string”/> 7 <property name=”password” type=”string”/> 8 </get> 9 </dbtrans>
返回的页面表现形式这里也不做介绍。
三.实现 简化普通程序员编写交易程序的程序量,同样也就需要在系统级程序中多做交易预处理和交易后处理,对于网站程序来说需要编写的系统级程序包括以下几个方面:
A) 交易预处理,将以往普通程序员需要自己处理的权限检查(权限放置于数据库中,所以ACLChecking需要与数据库交易,此交易需在交易文件中特殊定义,这里不做介绍),文件上传等预处理功能提取出来。
B) ParameterLoader实现的是提取上传的用户参数,参数配置放置于Parameter.xml文件中(当然,如果愿意也可以放置于数据库中),并判断是否需要特殊验证,需要的将调用特殊验证的Checking Class(这个是需要普通程序员编写的程序,这里的实现很灵活,根据不同情况进行实现),如果是普通的验证的话,可以编写统一的API来验证,也可以调用jarkata的validate.jar来进行验证。
C) 实现读写数据库后,下一步就是如何返回表现的页面,如图中显示,将调用ServletDefine来读取返回页面的定义(ServletDefine的定义放置于数据库中,所以需要与数据库交互数据),ServletDefine的数据库定义也可以很灵活,包括可以设定是否需要记录log,返回的页面表现形式(可以是JSP,XML,WML等等),返回的语言形式(CN,EN,DE等),转发的形式(Forward, redirect…)
D) 清理对象,包括清理临时文件,清理对象,这里的清理对象不包括数据库连接,因为数据库连接的申请和释放放置于DataController层的XMLProcess中。
E) 意外处理,所有的交易处理中出现意外,将提取出来做成一个意外处理交易,并内置于WebRequest中,交易的表现形式定义也放置于此。
F) XMLProcess,此对象专门用于与数据库打交道,包括调用连接池,申请连接,释放连接等,返回数据的转换也可以放置于此,当然也可以重新编写相应的数据转换类。
G) 为了实现ServletDefine的数据库读取,应该在Application Server中使用InvokeServlet的形式来调用Servlet。
当你实现了以上的这些处理,你就会发现如果是简单读取交易,普通程序员所需要做的就是填充两个XML,填写相应的数据库ServletDefine,和表现的页面,比较复杂的交易也不过几十行代码就完成了逻辑的处理,剩下的就是编写html等等东东了。
Good Luck, Enjoy.
Keli thisishnh@163.com
|
|