数据库访问层设计与实现(1)

原创 2006年05月28日 09:53:00

数据库访问层设计与实现

2006-05-28

 

摘要:为了使上层的应用不依赖于下面具体数据库的类型,建立一个数据库访问中间层是必要的。实现了一个数据库访问层中间件,使得上层应用不用纠缠与具体数据库类型问题,能根据应用环境的不同,灵活选择连接的管理方式、关键字的生成规则以及SQL语句的安全性检查方式等等。给出了数据库访问层的设计思想以及在.NET中的实现。

 

1 引言

在近期使用.NET开发项目时,发现这样一些问题,影响着程序的复用性和软件的灵活性:

1)数据库类型是变动的

原因有两个:一是因为不同的客户,对同一个应用程序的性能要求或费用开销不同,要求使用的数据库类型不同;二是我们在开发程序时,在不同的使用环境下,需要使用不同类型的数据库。

比如,如果使用ACCESS数据库,那么在程序中会使用System.Data.OleDb命名空间下的类,如OleDbConnectionOleDbParameterOleDbDataAdapter等等。如果现在要求支持SQL Server数据库该怎么办呢?那么就需要修改现有的大量的代码,将System.Data.OleDb下的类全部替换为System.Data.SqlClient命名空间下的类,即使是使用查找/替换进行批量的修改,也是非常繁琐,也很容易出错。当然还会存在一些错误,比如,OleDb是使用“?”来传递参数的,而SQL Server中使用的是命名参数(如,“@para”)。因此还需要修改大量的SQL语句,麻烦啊!

2)主键生成的规则不同

不同应用环境下,可能使用不同的主键生成策略,有的需要使用全局不重复的主键,有的需要加入时间或其他标记,有的只使用简单的计数器就可以。如果程序中写死了,下次环境变了,需要使用新的规则时,就又得改代码喽。

3)数据库连接管理

控制连接的数目,有时时单个连接,有时是若干个连接,有时使用连接池……

4SQL语句安全性检查

为了防止恶意攻击,需要对SQL进行检查。有很多种检查方法,究竟使用哪个呢?

5)程序中SQL语句到处飞

如果使用关系数据库,SQL语句是少不了的。但是SQL语句在应用层出现太多,一旦数据库发生变化,那么上层需要修改的SQL语句就太多了,而且在编译时发现不了SQL语句的错误,在运行时才能找到。另外大量的SQL语句,还严重影响了程序的美观。

对于上面的问题,最好的解决方法就是建立一个数据库访问中间层,来屏蔽这些问题。(当然有一些现成的框架,如NHibernate,可以使用,不需要我们自己动手。)本文后续部分将讨论如何解决这些问题,主要在如何设计,并给出部分实现。

 

数据访问层的设计和实现(分布式系统七)

(1)如何对外提供数据访问层的功能 数据访问层就是方便应用进行数据读写访问的抽象层,在该层上解决各个应用通用的访问数据库的问题。 上图显示了三种方式,第一种是为用户提供专有API,不过不推...
  • u011393781
  • u011393781
  • 2016年10月08日 17:41
  • 1485

数据访问层的设计(一)——功能与接口定义

数据访问层的设计我研究了很长时间,关于接口的定义,好几次都推翻重来。 园子看到过很多easyui+MVC+EF的文章,在早期,我的设计也类似。 但是后来为了增强它,想加点功能通用的功能进去,就耗费...
  • dyllove98
  • dyllove98
  • 2013年07月19日 19:19
  • 7943

数据访问层MyBatis解析

一、背景         最近在研究Java的框架,刚刚接触到java对于数据访问层封装的框架之一,MyBatis,不得不说使用起来很是方便,跟写sql语句的感觉一样一样的;顺便读了少部分官方文档,...
  • u012704843
  • u012704843
  • 2017年04月06日 17:46
  • 864

数据库访问抽象层系列-1(介绍数据库编程接口及数据库访问抽象层概念)

摘要 本人最近完成了一个封装数据库访问抽象层的项目。我们开发的数据库访问抽象层作为分布式集群基础平台的一个组件。可以支持不同数据库编程接口(OCI、mysql、ODBC、pgsql)等。本系列博...
  • bobkentblog
  • bobkentblog
  • 2015年04月15日 10:37
  • 2292

数据库设计实现严格的一对一关系

目标:某单位的职工的基本信息主要有:职工号、姓名、性别、出生日期、身份证号、家庭住址、联系电话,职工的登陆信息主要有:登陆账号、登陆密码和证书摘要。这些数据项都非空。其类图如下图所示: ![类图](h...
  • z654938874
  • z654938874
  • 2017年06月22日 15:14
  • 297

.net中的数据访问层的封装

当年.net项目中自己封装的数据访问层,个人感觉使用非常方便
  • kevin_xf
  • kevin_xf
  • 2016年12月05日 15:53
  • 765

三层架构:表示层——业务逻辑层——数据访问层

三层架构:表示层——业务逻辑层——数据访问层 1.什么是三层架构     所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部...
  • Sayesan
  • Sayesan
  • 2015年08月12日 13:35
  • 9371

三层架构:表示层-业务逻辑层-数据访问层

三层架构和MVC是两个东西。 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页面(类)对应MVC中的Co...
  • m0_37033566
  • m0_37033566
  • 2016年12月21日 16:50
  • 9874

App架构设计经验谈:数据层的设计

一个App,从根本上来说,就是对数据的处理,包括数据从哪里来、数据如何组织、数据怎么展示,从职责上划分就是:数据管理、数据加工、数据展示。相对应的也就有了三层架构:数据层、业务层、展示层。本文就先讲讲...
  • lz0426001
  • lz0426001
  • 2016年02月23日 10:51
  • 1143

框架学习(1)——service层,dao层和service实现类进行数据库操作

浅谈对java框架设计中service层、dao层和service实现类作用的理解以及好处
  • qq_34825926
  • qq_34825926
  • 2017年04月05日 20:48
  • 856
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库访问层设计与实现(1)
举报原因:
原因补充:

(最多只允许输入30个字)