jsp/servlet web application 结构问题about struts/XML(300分)

  • 主题发起人 曹晓钢
  • 开始时间

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
工作环境中有RDBMS,客户端是JSP,如何才是最好的对象模型呢?
先说一下我的理解。
对于RDBMS中的Table,和Java class是可以一一对应的。假设我们有个表叫做PurchaseOrder,
还有个表叫做PerchaseOrderItem,简写为PO和POItems.那么相对应的就应该有两个Java class:
PurchaseOrder和PurchaseOrderItem.在同名的Table和Class之间,Table的Column和Class
的properties是一一对应的。
我们来考虑一些基本问题。首先是PO和POItems的关系。在数据库中他们是1:(0,*)的关系,
也就是delphi里面的master/detail关系。在Java class中间,PurchaseOrder应该在一个
Collection里面包含若干个PurchaseDetailItems。
考虑到四种基本的操作(select/insert/modify/delete)都可以被完全的实现,这样我们
就完成了从RDBMS table row到JavaClass instance的映射。通过技术手段可以使得这种
映射是有效的,完全可以自动化。
现在我们要使用JavaClass来生成HTML.在jsp里面引用Java Class的properties,来构造这个
HTML页面。由于有4种基本操作,所以叶面比较难写。为了处理PO的properties,就需要
2个不同的叶面:只读的显示界面和可以修改的界面。
对于这个困难,我采用这样的方法解决:自己写了一套taglib,由一个Layout外框和若干个
Element组成。大概是这样的结构:
<layout mode="display"> // or 'modify' when user want to modify.
<Element property="PurchaseFrom"/>
<Element property="ShipAddress"/>
...
</layout>
这个Element可以自行处理输出,在layout mode为display的时候输出span Tag,在mode
为modify的时候输出input Tag.
在客户端提交Form上来的时候,一个方法可以parse Form的参数,实现自动化的JavaClass
属性装载。
这样,JavaClass和Form之间也可以变成映射的关系。
下面要说到正题了。
今天研读Struts,有所启发。
我原来的程序结构中,没有ActionMapping这个关键层。我的理解是这是个调度接口,就是
一个类似于软件总线的接口。尽管我原来的结构中做的没有如此明显,但是基本思想是一
致的。
利用Struts来生成Form,有一个优点是可以实现集中的Server端validate.本来这是一个很繁琐
的步骤。
但是我还有另一个思路。
如上所述,到现在为止我们实现的是从RDBMS Table到JavaClass的完全映射,假设我们的客户需要
我们输出一个PurchaseOrder的备份给他,然后要求我们的系统还提供一个接口,允许他使用
这个备份来重新生成PurchaseOrder,那么我们就不能简单的利用web接口了。
一个比较好的办法是生成XML文件来实现这个备份。作为标准文档接口,XML具有很多优势。
这时候我意识到XML和RDBMS,JavaClass是三个相互独立,而且相互可以完全映射的实体。
从JavaClass的properties中完全可以自动的dump出一个XML文件来,并且从XML中提取attibute
生成JavaClass的Instance也是可行的。
由于这三者都可以标准化,可以做到只要定义了数据库结构,就可以自动生成JavaCode和
XML DTD/schema。而且在运行时,Table Row,Java class instance, XML 可以相互等价替换。
这样的话,假设我们的JavaClass已经可以随时转换成为XML,那么为什么不利用这个XML来
直接生成HTML呢?只需要简单的XSLT就可以实现。考虑到客户端对应的结构可以用Form
来代表,我们现在就有4个实体:RDBMS table row,JavaClass,XML,HTML Form。
从HTML form提交的结果中,我们可以自动化的提取元素来赋值给JavaClass(这一点我已经
在现实的工程中使用了),那么,这是不是意味着我们可以实现这4中实体的完全转换?
这样的话,Struts扮演一个什么角色呢?
在生成HTML的时候,XML和Struts只需要其中一个。
使用Struts的好处是我们可以利用Struts来做Validate,做完Validate就可以把Form传上
来的数据装载到JavaClass。
现在我有一个设想,可不可能利用XML在Struts的基础上实现更加通用的结构模型?
(Struts初学者,若有错误切莫见笑)
如何才是最好的结构呢?
欢迎大家继续讨论!

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=682360
这个帖子也提到了XML的另外一个应用。使用Email传送经过加密的XML到中心服务器,然后中心服务器
做处理,用Email给出结果。XML是一个好载体。
 
学习,这个问题也在思考 ,已经有了一个小方案,等我整理一下,再贴来。
 
考虑一下XML在这里的作用,如果只是用来做数据的载体(备份,恢复)的话,只需要做到
java class<->xml就可以了。通过web 界面来实现导入导出。完全和struts没有关系的。
而且我觉得这样的程序也会很灵活。毕竟有一个类的时候我就可以随时得到一个xml的结点,
至于是存成XML或是做其它的用途随你的便啦。
你很有钱嘛,一出手就是300分?呵呵。
 
对于struts我也是了解有限。但总的感觉是太麻烦!对于我们的应用中来说,虽然从结构上来说MVC模式很合理,但是对于每一个action都要编写相应的代码,太繁琐。而且如果将来对程序改动的话,相信第三者也会感到困难!我们单位在这方面有应用,现在的结构大量采用了类似struts之类的opensource,如dbforms(个人认为,此物妙不可言,比struts应用的范围更广),pow2acl,tiles,poolman…… 它们可以和struts共同构建强大的web应用。虽然我的想法可能有些不正确,但是希望能有所帮助!
 
to xiaoys:
谢谢你的回贴。
能不能给我们详细介绍一下dbforums,还有你们是如何使用它的?
 
还有一个问题,dbforms你们是怎么和struts一起用的呢?
 
以dbforms的功能和结构来看,是和struts有冲突的。
struts强调的是mvc,是维护的方便性,而dbforms强调的是代码生成的速度和简易性。
不知道xiaoys在使用了dbforms后,后期的维护工作是怎么样完成的?
比如说数据库有了较大的变化后?
 
hehe , 在delphi 6 中有这种对应关系的类, 我用过几次, 很好用。你可以参照
delphi 中的类对象模型改造成java 的 class [:)]
 
真的?是哪几个类?学习一下 :)
 
看了一段时间 struts,简单谈谈感想。我感觉其核心思想有三个:
1、集中转发机制
2、Adapter pattern
3、类似于 .NET web control 的 Tag lib
我觉得其中只有第二个有点意思。等有时间给大家具体分析分析。
 
我也学习。
 
随着 JSTL 逐渐露出水面 http://java.sun.com/products/jsp/taglibraries.html
http://www.delphibbs.com/delphibbs/dispq.asp?lid=995899
我已经快对 Struts 失去兴趣。
 
实话实说:我看不懂
 
向你学习!!!
 
顶部