Winform开发框架之数据访问层的设计

简介:

我在前面几篇介绍过我的Winform开发框架的相关内容,其中主要集中在界面展现以及各层的总体设计上,还没有空来得及深入进行各个重要细节的讲解,今天我们来介绍、讨论下我的Winform开发框架之数据访问层的设计方面的知识,希望对大家有所帮助。

前面介绍过,该Winform开发框架支持多种数据库的访问,只需要对配置进行修改即可切换,如下图所示。

 

其中我们可以看到,里面有几种数据访问层的相关数据,大致知道是通过同一的IDAL数据访问层接口派生出几个对应不同数据库的操作层,由业务逻辑层BLL进行相应的调用,但是具体细节从上图并不能了解到。

其实他们的大致关系如下图所示。 

 

首先BLL层,通过BLLFactory对象,根据配置信息,实例化不同的业务访问对象,转换为数据访问层接口进行调用的,BLLFactory通过反射间接方式,构建出不同数据库对象的数据访问层,而数据访问对象,他们都集成了基类BaseDAL,这个基类封装类了绝大多数的增删改查等基础性操作,并通过高度抽象,只需要继承该基类的子类重载部分函数即可完成较为丰富的操作实现。具体的继承关系如下图所示。

 

由于每个不同数据库都需要拥有一个BaseDAL,那么很多相同的操作代码就会发生冗余,因为大多数数据库的基础操作是一样的,只有一部分比较特别,需要进行个性化处理,因此对以上的数据访问层进行优化设计,得到下面的设计图,如下所示。

 

由于把BaseDAL层的通用操作,进一步提升抽象到AbstractBaseDAL 类里面进行管理,因此,BaseDAL虽然在各种数据库的数据访问层中存在,但是,却只是需要实现很少的代码,如下所示。

 

因为不同的数据库,FindFirst(查找第一条)、FindLast(查找最后一条)、Insert2(插入记录后,返回新增的主键值)、以及分页查询FindToDataTable、FindWithPager等不同。因此数据访问层的BaseDAL子类需要覆盖基类AbstractBaseDAL的这些实现。

通过实现部分个性化数据库操作的函数及强大的基类

AbstractBaseDAL实现,我们可以看到,整个数据访问层基类得到非常强大的操作功能,如下所示。

为了说明问题,我列举几个上面函数不同的实现给读者,以便说明问题。

1)SqlServer的FindFirst语句如下:

             string sql =  string.Format( " Select top 1 {0} From {1} Order by {2} ASC ", selectedFields, tableName, GetSafeFileName(sortField));

2)Oracle的FindFirst语句如下:

  string sql = string.Format(@"Select * from (Select {0} From {1} Order by {2} ASC)   WHERE ROWNUM <= 1 ORDER BY ROWNUM ASC", selectedFields, tableName, GetSafeFileName(sortField)); 


3)Sqlite的FindFirst语句如下:  

  string sql = string.Format("Select {0} From {1} Order by {2} ASC LIMIT 1", selectedFields, tableName, GetSafeFileName(sortField)); 

为了实现功能强大的数据访问基类,并尽可能减少重复代码,高度提炼基类是很有效的方法。适当的集成关系,使得代码量更少,扩展更加容易,这个就是我的Winform框架的优化思想。

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之数据访问层的设计,如需转载请自行联系原博主。



目录
相关文章
|
1月前
深入.net平台的分层开发
深入.net平台的分层开发
52 0
|
Java 关系型数据库 程序员
【组件设计开发】采用领域驱动设计设计和开发可组装的组件
采用领域驱动设计设计和开发可组装的组件
27844 7
【组件设计开发】采用领域驱动设计设计和开发可组装的组件
|
SQL 存储 .NET
三层架构之我见 —— 不同于您见过的三层架构。
我从02年开始了编程的工作,开始接触一些简单的网站,下半年写了个小的自助建站程序(asp和asp.net),比较简陋没有使用。03年开始正式做网站(asp)。03年下半年开始改版三好在线(www.sanhaoonline.com   asp.net ),03年底、04年初才知道了三层架构的相关东东,一开始是很不了解的,所以呢根本就没有理睬,依旧按照我自己的思路写网站。
1217 0
|
SQL 存储 JSON
【自然框架】之数据访问 —— 再小的类库也需要设计。
  以前也写过几篇关于数据访问的,这里是最新的总结。麻雀虽小五脏俱全,数据访问也许不起眼,但是也要好好的设计一翻。从2004年开始用自己的数据访问,一直到现在,经历过两次大的改版,随着需求的变化,也增加了不少的功能,小修小改那就更多了。
1004 0
|
缓存 .NET 开发框架
【ABP框架系列学习】N层架构(3)
原文:【ABP框架系列学习】N层架构(3) 目录 0.引言 1.DDD分层 2.ABP应用构架模型 客户端应用程序(Client Applications) 表现层(Presentation Layer) 分布式服务层(Distributed Service Layer) 应用层(Application Layer) 领域层 基础设施层 3.使用ABP项目模版快速生成应用程序 0.引言 应用程序的分层是一种广泛接受的技术, 可以降低复杂度和提高代码的可重用性。
1700 0
|
存储 关系型数据库 BI
|
数据库 开发框架 数据处理
|
关系型数据库 数据库 开发框架
|
关系型数据库 数据库 数据安全/隐私保护
|
数据库 开发框架 数据安全/隐私保护

热门文章

最新文章