PDF.NET不使用DalFactory和IDAL支持多种数据库应用方案

转载 2012年03月21日 11:36:36
 

MS的PetShop示例应用程序的“多层架构”被很多.NET开发人员奉为经典的架构,我以前做的项目团队的Leader也是照搬它的,甚至来到现在这个公司后,好几个新来的同事建解决方案也是照搬PetShop的架构,可见PetShop对大家影响之深。

下面是PetShop 3.0的架构图:

为了支持多数据库应用,在DAL中,定义了DAL Interface和DAL Factory,下面这个图也许跟简单直观一些

 

通过这个图大家都能够明白,引入DalFactory和IDAL就是为了系统支持不同的数据库。

PDF.NET数据开发框架采用了完全不同的方式,先看看它的分层架构图:

如果在DAL中没有某种数据库特有的SQL语句,DalFactory是不需要的,当然IDAL也不需要了。例如ORM操作,一般不会用到数据库的特性,发出的都是标准的SQL语句。PDF.NET数据开发框架的ORM操作是通过EntityQuery和OQL表达式来实现,在具体支持不同数据库的时候,底层采用的是反射工厂模式:

 

 /// <summary>
        
/// 创建公共数据访问类的实例
        
/// </summary>
        
/// <param name="providerAssembly">提供这程序集名称</param>
        
/// <param name="providerType">提供者类型</param>
        
/// <returns></returns>
        public static AdoHelper CreateInstance( string providerAssembly, string providerType )
        {
            Assembly assembly 
= Assembly.Load( providerAssembly );
            
object provider = assembly.CreateInstance( providerType );

            
if( provider is AdoHelper )
            {
                
return provider as AdoHelper;
            }
            
else
            {
                
throw new InvalidOperationException("当前指定的的提供程序不是 AdoHelper 抽象类的具体实现类,请确保应用程序进行了正确的配置(如connectionStrings 配置节的 providerName 属性)。");
            }
        }

 

这样只需要在配置文件中进行配置,指明采用何种数据库即可,这是框架脱离DalFactory+IDAL的第一种方式。


当然,为了高效的使用某种数据库的特性,有可能会写一些数据库特性的SQL,要使得系统支持不同的数据库,还得使用DalFactory,因此得定义IDAL。

 

PDF.NET数据开发框架为了解决这个问题,将所有的SQL语句写在一个配置文件SqlMap.config中,使用工具自动生成框架的DAL代码,即SqlMapDAL,不同的数据库系统使用不同的SqlMap.config文件即可,不需要替换SqlMapDAL,因此,框架再也不需要定义DalFactory和IDAL了,这应该算是第二种方式。
下图是根据SqlMap自动生成代码并运行的流程:

 

在SqlMap中,可以将结果映射成DataSet,实体类和实体类集合,也可以是单值类型,可以完成各种复杂的SQL操作,可以处理存储过程。系统将SQL语句中的参数映射成DAL代码中方法的参数,使得操作非常直观高效,并且没有SQL注入的问题。

 

PDF.NET数据开发框架通过自己的ORM(EntityQuery+OQL)结合SQL-MAP的方式,使得喜欢OO的人和喜欢SQL的人都能找到自己需要的,便利性和灵活性都能够兼得。

不使用DalFactory和IDAL,支持多种数据库应用

MS的PetShop示例应用程序的“多层架构”被很多.NET开发人员奉为经典的架构,为了支持多数据库应用,在DAL中,定义了DAL Interface和DAL Factory,而PDF.NET数据开发...

开源】【强大】【百万级数据分页】QuickPager ASP.NET2.0分页控件V2.0.0.1——支持多种数据库。让分页更加

分页控件的源代码下载网址:http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html (在网页的下面) 下载文件里面由一个测试网页:h...

使用ADO.NET 建立适应多种数据库的数据访问层接口

抽象的.NET Framework数据提供最终规则规定的原因,以及如何你应该抽象的。NET Framework数据提供者使用在你的DAL内部。正如我所提到的的,ADO.NET编程模型公开截然不同。...

修改PDF.NET SOD源代码以支持加密的数据库连接字符串

看了下PDF.NET SOD的代码,好像数据库连接字符串,只支持明文写在config文件的。这在一定程度上存在数据库账号密码泄漏的风险,于是鼓捣了源代码中的PWMIS.DataProvider.Ada...
  • qqcxw
  • qqcxw
  • 2016年07月17日 00:23
  • 1926

在.NET中DAL+IDAL+Model+BLL+Web

在.NET中 DAL+IDAL+Model+BLL+Web 业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积...
  • mobiyue
  • mobiyue
  • 2014年05月07日 16:26
  • 1235

在.NET中 DAL+IDAL+Model+BLL+Web是什么意思

其实三层架构是一个程序最基本的 在.Net开发中通常是多层开发比如说BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 客户程序...

在.NET中 DAL+IDAL+Model+BLL+Web的意思

其实三层架构是一个程序最基本的 在.Net开发中通常是多层开发 比如说 BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后...

一个方便的.net数据库操作类(很容易扩展,以支持多种数据库)

转自 http://www.cnblogs.com/dreamszx/archive/2011/01/13/1934598.html本文分三部分1.数据抽象类(只有抽象,没有实现,由继承类去实现,以支...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PDF.NET不使用DalFactory和IDAL支持多种数据库应用方案
举报原因:
原因补充:

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