基于设计模式的通用数据库访问研究及应用

时间:2022-10-11 02:43:30

基于设计模式的通用数据库访问研究及应用

摘要:在大型企业应用软件系统开发中,常需面对不同类型数据源,由于异类数据源的访问机制不同,异类数据源的存在给程序开发和维护带来困难。为解决该问题,设计一基于设计模式的通用数据层访问组件模型,文中以系统重构前后如何适应多数据库为例进行说明。

关键词:重构;MVC架构;DAO模型;设计模式

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)07-1503-04

Research and Application of General Database Access on Design Patterns

ZOU Guan-hui, LONG Jun

(School of Information Science and Engineering, Central South University, Changsha 410083, China)

Abstract: We often deal with problem of different type data sources when design a enterprising application, which brings a lot of troubles to the development and maintenance of system because of different data sources have different access mechanism. A general data layer component model was designed and implemented in patter model.

Key words: refactor; Model/View/Controller; DAO model; design pattern

1 概述

企业有一05年度开发的管理系统,当时采用JSP+JavaBean架构,因受个人能力有限,虽然实现了逻辑功能和显示功能的分离,但是由于视图层和控制层都是由JSP页面实现的,即视图层和控制层没有实现分离,仍属于传统Model1模式,不符和MVC开发原则。因该软件目前整体运行情况良好,满足企业需求,想在不改变软件行为的前提下,对软件内部结构及代码进行重构,使管理系统符合J2EE技术标准,提高代码其可阅读性,实现软件更大粒度的复用。

因重构内容较多(涉及到UI层,业务逻辑层,数据持久层、域对象层等内容),现仅以系统重构前后如何适应多数据库为例进行说明。

2 旧系统数据库连接简介

系统数据库连接方式采用数据库厂商提供的专用驱动程序,通过JDBC API调用转换为直接网络调用,实现数据库连接,个人认为这种调用方式一般性能比较好,而且也是实用中最简单的方法。

为适应多数据库访问,旧系统实现原理:应用程序(javabean、SEVLET等)―>读取配置文件->JDBC API驱动程序->访问数据库(MYSQL、SQL2000);

2.1 读取dbconfig.property配置文件,获得数据库连接信息 (Property文件内容见下)

DBType=0 //dbtype值代表数据库类型:0为MYSQL,1为ORACLE

MySQLDriver=org.gjt.mm.mysql.Driver

MySQLURL=jdbc:mysql://localhost:3306/databasename?user&password…

………

AccessDriver=sun.jdbc.odbc.JdbcOdbcDriver

AccessURL=jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}

AccessPath=D:/eclipse/workspace/news/……databasename

……………

2.2 根据读取DBType值来判断数据库连接类型

switch(DBType)

{

case 0:return(getConnToMySql ());

case 1:return(getConnToOracle());

……………

default:return null;

}

2.3 调用API函数建立数据库连接

private Connection getConnToMySql(){

StringSqlDriver = getPara("MySQLDriver ");//配置文件返回值

StringsqlURL = getPara("MySQLURL ");

Class.forName(SqlDriver);

Connection DriverManager.getConnection(sqlurl);

}

……………

private Connection getConnToAccess l(){//…..}

private Connection GetConnToSql(){//…..}

…………….

3 问题的提出

该系统中数据库访问逻辑代码没有放在视图层中,但视图层和控制层都是由JSP页面实现的,即视图层和控制层没有实现分离,属于Model1模式。随着企业规模的不断扩大,业务逻辑规则不断添加,维护难度增加,旧系统的缺陷是明显的,例如业务规则和模型代码混合在一起,这类代码依赖性使应用程序在在添加业务规则时非常麻烦;大粒度的软件复用几乎不可能。

在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。Model2模式――MVC开发模式克服了Model1存在的不足,MVC的具体含义是:model+view+control,即模型+视图+控制,这样的模式集成了JSP、Serclet、JavaBean,非常适合大型项目的开发,具有良好的伸缩性和扩展性。

按照MVC的设计原则,层与层之间应该保持相对独立,数据的传递在不同的层之间通常利用Java Bean来创建数据传输对象(Data Transfer Object,简称DTO),从技术的角度上面来说,有几个优点:

1) 采用DTO来传输数据可以减少传输数据的冗余,提高传输效率,更重要的是实现了各个层之间的独立,使每个层分工明确。模型层负责业务逻辑,视图层负责向用户展示模型状态。

2) 采用DTO,模型层对视图层屏蔽了业务逻辑细节,向视图层提供可以直接显示给用户的数据。在一个规范的J2EE架构中,不同层的数据表示应该被限制在层内,而不应该扩散到其它层,这样可以降低层间的耦合性,提高J2EE架构整体的可维护性和可扩展性。比如说Web层的逻辑进行了修改,那么只需要修改Web层的Form Bean结构,而不需要触动业务层和持久层的代码修改。同样的,当数据库表进行了小的调整,那么也只需要修改持久层数据表示,而不需要触动业务层代码和Web层代码。

结合项目中如何适应多数据库问题,决定使用DAO(DATA Access objiect)模式及工厂模式相结合的解决方案法。

4 现有系统详细说明

上一篇:网络系统风险分析与解决方案 下一篇:软件开发中UML技术的应用研究