数据访问技术(DataAccessTecnique)和数据感知控件(Control)
TomHornson#(at)#hotmail.com
12/29/2004于珞珈山
无疑,十多年来,无论在什么平台上,数据应用系统在软件系统中一直占据很大的比例。所以,数据访问技术自然也备受关注。在我的阅历里,可以说出的相关技术有:1、 Window平台:ODBC、DAO、ADO、ADO.NET 2、 Java平台:JDBC
另外在J2EE平台下,目前,Java数据应用系统中常用的技术有:DAO和O/R Mapping。DAO不属于数据访问技术(DataAccessTecnique),它只是对JDBC的一种包装,它使Java数据库编程更加有效率、清爽,也使得三层结构成为可能。DAO是一种Pattern。而O/R Mapping技术是可能出于OO思潮的影响,人们企图通过更自然的对象视图(Object View)来和数据库交互,使对象访问部分和OO系统的整体风格更加融合,包括在系统分析、设计等方面。O/R Mapping技术很多,比较常见的包括蹩脚的EntityBean、如日中天的Hibernate、JDO、IBATIS等等。特别是Hibernate、JDO,还有尚未完形的EJB3.0,应该会成为将来的主流。O/R Mapping对J2EE的影响应该说比较深远,它不但影响了系统的数据访问部分,甚至对系统的整体架构也产生了一定的影响,当然,这些主要说的是以数据(特别是RDBMS)应用为中心的J2EE系统。
在MS的dotNET平台上,也有O/R Mapping技术,我不是很清楚。听说过一个nHibernate。
事实上,这篇文章,我的目标不是数据访问技术,而是数据感知控件(control),特别是用户Web开发的数据感知控件。
一、 Windows桌面应用中的数据感知控件
我想使用VC、VB、Delphi编过程的都知道数据感知控件吧。譬如VC的ListControl、VB的DataList控件等。
当然,这些控件的背后也没有什么魔力。你告诉它你需要连接的数据库、表、列等信息。在Control加载的时候,
它利用提供的信息访问数据库,取出数据、填充到control中,就是这样而已。数据感知控件可以在简单的数据库应用中,
减轻编程的负担。
二、 ASP
ASP中,我们是怎样显示数据的?是怎样将数据更新到数据库的?
我们首先通过ADO或者ODBC等数据访问技术取得数据,然后,使用HTML显示数据。
我们通过Request来取得需要更新的数据,然后通过ADO或者ODBC数据访问技术来更新数据库。
这里,在ASP编程的时候,你有想过,为什么ASP中不能有Windows桌面应用那样的控件、甚至数据感知控件?
你是否也希望有那样的技术、那样的控件,这样,你的ASP编程将变的更加简单、而且有效率。
三、 JSP
但从,最普通的编程方式来说,JSP和ASP,差别不大。但是,我想强调的是JSP的Taglib。JSP中的Taglib技术的初衷是什么或者说Taglib给我们带来了什么好处?我想,无非就是复用一些java逻辑代码、使页面变得更加清爽,尽量减少JSP页面的“污染”。
个人觉的,Taglib的功能完全可以通过<%! %>定义函数的形式来完成。函数这样的使用方式同样可以复用、可以使页面变的更加清爽。有人,告诉我,因为Taglib采用XML的形式,所以,很多XML编辑器通过plugin可以显示它。对这种说法,我持保留太多。因为,我一直不相信,Taglib使因为这个原因而引入JSP Spec的。我的另外一个想法,是Taglib的扩展性很强,这个想法目前还没有得到任何的证实。如果,说Taglib只是为了复用、美化页面,那么我说,Taglib真的可以说是JSP引入了的复杂而没有用的东西。Taglib也没有比ASP中那种使用函数编程的方式好,反而使编程更麻烦。 |
四、 dotNET Control
在(二、ASP)部分,我们有一个美好的愿望:ASP可以有Windows桌面应用那样的控件、甚至数据感知控件吗?
很显然dotNET中,你的愿望实现了。谈到这里,我们接触到本文的三个核心论题了。
4.1 dotNET封装了c/s交互,带来的Web开发新的冲击
我以前一直觉的,JSP、ASP编程的繁琐很大一个原因是Http是非持久连接的,导致,server需要不断使用Request等地从client端获取信息,验证信息等等,还需要使用Session来为用户维持长周期地会话。我觉的,这些东西,真的是做起来毫无意义、而又不得不作,工作量还相当地大。Java领域有Echo这样的项目,企图用Swing编程风格来编写WebApp。明明是Web开发,却又扯上Swing,这种做法真的有意义吗?或者说,是一种好的解决方案吗?我个人是嗤之以鼻的。
dotNET出来了,你基本只需要以Windows桌面应用的视角(View)来编程就可以了。这里的magic是什么?就是它封装了client-server的信息交互、会话,而且封装的在目前能够看到的技术中,个人感觉是最完美的。
4.2 JSP的Taglib和dotNET的WebControl
在Taglib时代,我就思索过,为什么不可以为Taglib提供VisulEdit,并且如Windows桌面应用那样提供数据感知能力来简化开发。譬如,display taglib,我看过的一个非常好的库,如果,为它提供VisualEdit、并且提供数据感知能力,用它来快速开发应该说相当的不错。但是,为什么,我没有看到这一切的发生?
dotNET出来了,我看到了MS提供的WebControl。在我的眼里,它怎么会Taglib那么神似?但是,它是可以Visual的、可以Edit的。对于小型项目、对于快速开发,无疑,它具有绝对的竞争力。
4.3 dotNET Server-Side-Control的缺陷
MS的技术,包括dotNET,比较讲求开发的简易、快速。这是MS多年的风格。所以,Server-Side-Control的设计一定程度上,受这种惯性思维的影响。我目前,能够提出的问题就是:它的数据感应控件,只能通过譬如数据库、表、列等信息来感知数据。不支持Object、Collection等的感应,譬如ArrayList Instance。而,我知道的Java Display Taglib是可以同时感知ResultSet、Collection的。不能感应Object、Collection,那么体系结构分层的实施就会受阻。因为,你将表示层和数据库糊在一起了。
五、 寄希望于JSF了
听说,JSF提供Visual、c/s交互等的封装,和ASP.NET很像。还没有学习这东西,希
望能够给我们带来惊喜。
六、 JDBC、ADO.NET、O/R Mapping
不用说,ADO.NET是新生代,不是JDBC能够比的,不过,JavavOpenSource社区的力
量,不能低估。既然,在J2EE领域,给你一个ADO.NET,我想你还是会选择Hibernate之流的O/R Mapping Tool来做开发的。
注:这篇文章的想法,基本只是一个大概的思路。因为,我对dotNET的了解比较有限。还有,到底怎样来开发Taglib的VisualEdit?dotNET-Server-Side-Control怎样才能够支持感应List、Collection等?这样做,意味着其它什么样的连带的问题会发生?即使实现了,到底意义大到什么程度?这些都还没有深入的思考和探讨。以后,有时间再说了。 |
修订记录: |