DevLib数据库开发包设计思路

来源:互联网 发布:ansys知乎 编辑:程序博客网 时间:2024/05/22 12:39
一、B/S应用程序开发过程中常用的数据库操作

B/S应用程序开发过程中对数据库进行操作通常采用取得数据库操作的请求数据后在JavaBean或EJB中使用字符串拼SQL语句,然后通过JDBC发送来达到对数据库的CRUD操作,这种方式导致了大量的重复劳动,对提高开发速度和应用程序维护都带来了困难。

为了解决这个问题,业界出现了诸如Hibernate、DAO等数据库持久层框架或数据库持久化解决方案。但也许是出于通用性考虑,这些解决方案只是专著于如何简化访问数据库编程,而没有解决数据库中的表、字段等在客户端的表现和校验以及数据库表、字段、视图的客户端访问权限等方面的问题。如:某个数据表的中文标题、字段的客户端校验等。

如何将数据库的设计、后端访问、前端表现、数据校验有机地结合起来,在提高Java开发速度的同时又不失其灵活性?能不能将常用的数据库CRUD操作编程简化为设计数据库――定义数据――引用包――发布,而不需要进行代码编写?DevLib尝试实现如下:

二、DevLib数据库开发包设计思路

DevLib采用数据库结构设计工具定义整个应用程序数据库的结构并将其存储在结构数据库中,在应用程序第一次启动的时候利用这些数据动态生成DAO JavaBean,再通过操作这些DAO JavaBean来实现数据库操作的封装,在应用程序客户端采用FreeMarker实现用户界面的模板化定义。

一)、数据库结构定义工具及数据库结构定义:

数据库结构定义工具的作用是定义数据库的表、字段、视图结构和B/S应用程序开发过程中需要使用的其它相关信息,这些信息存储在应用程序数据库结构定义数据库中。数据库结构定义工具可以利用这些数据生成应用程序数据库结构定义的SQL语句。应用程序数据库结构定义数据库随DevLib开发包一起发布,在应用程序第一次启动的时候可利用结构定义数据自动生成DAO类。数据库结构定义工具界面如下:

 (小弟驽钝,还不清楚怎么上传图片,请熟悉的大侠留言告知,感谢!)


二)、DevLib开发包:

DevLib开发包由数据库连接管理包DBUtil、数据库结构定义包DBStructure、数据库对象抽象包DevUnit、DAO对象生成包DyClass组成。

1、数据库连接管理包DBUtil:提供与当前常用数据库(DB2、MS SQL、Oracle、MySQL)的JDBC连接、连接池的管理、数据对象的抽象(如:RecordSet、Record、Field),实现应用程序与数据库的交互和查询;

2、数据库结构定义包DBStructure:读取应用程序数据库结构定义数据,为应用程序提供完整的数据库结构信息和数据展现所需的其它信息。并以两种方式提供给应用程序使用:一是以机构类的形式在内存中保存,应用程序通过读取结构定义类来获取数据库结构信息,这种方式从实质上来看只是简单地提供了数据库结构定义的缓存数据;第二种方式是读取应用程序数据库结构定义数据,通过扩展数据库对象抽象包中的抽象类,由DAO对象生成报DyClass生成DAO数据库访问类,这种方式将数据库结构定义数据转化为JavaBean的形式,可以按需调用。

3、数据库对象抽象包DevUnit:为DAO对象提供抽象类,并在这些抽象类中实现数据库常用CRUD操作,共包含以下抽象类:

1)、TableUnit:对数据库表的抽象,并通过RecordSet对象实现数据库表的CRUD操作;

2)、FieldUnit:对数据库字段的抽象,为应用程序提供字段定义数据;

3)、FieldShowUnit:对数据库字段前端显示的抽象,实现数据库字段在客户端显示及校验规则的定义;

4)、ViewUnit:对数据库视图的抽象,并通过RecordSet对象实现数据库视图的查询;

5)、VfieldUnit:对数据库视图中字段的抽象,实现视图字段和表字段的差别化定义;

4、DAO对象生成包DyClass:通过数据库结构定义包DBStructure读取数据库结构定义数据,继承数据库对象抽象包DevUnit中的抽象类生成DAO数据库访问类。

三)、DAO数据库访问类:

数据库访问类继承DevUnit包中的各个抽象类,由DevLib动态生成和加载,且只需要在应用程序第一次启动的时候生成一次即可。这些数据库访问类为DevUnit包中的各个抽象类提供数据表、字段、视图等的差别性定义数据,如:数据表标题、字段名称、字段长度、字段校验信息等。在使用的时候可以通过类加载器直接对这些类进行调用。

四)、Portlet抽象类:

继承GenericPort类,利用TableUnit实现完整的数据库CRUD操作的Portlet。并提供自定义操作接口,开发常用的数据库操作Portlet只需要继承这个类并发布即可,不需要写CRUD相关的任何代码;

五)、客户端展现:

采用FreeMarker模板技术,通过修改页面模板的方式实现同一个Portet或JSP页面的不同展现方式,而不需要对应用程序源代码进行改动。将Portlet或JSP页面的开发简化为类似于HTML的设计。

三、使用DevLib开发包的开发步骤

以开发Portlet为例,说明使用采用DevLib开发包的开发步骤:

   1.

      使用数据库结构定义工具定义数据库结构;
   2.

      创建Portal项目,引入DevLib开发包;
   3.

      重复创建多个Portlet,继承Portlet抽象类,并提供该Portlet操作的DAO类名称(通常是数据表名称);
   4.

      修改FreeMarker模板,发布;

从上述步骤可以看到,使用DevLib开发包开发具有数据表CRUD操作基本上不需要写代码,这样开发者就可以不用进行重复的数据库CRUD编程而专注于应用程序业务的实现,从而最大程度地提高开发效率。
 
原创粉丝点击