DNN的数据访问方式——合理运用模式,提高数据访问的灵活性(有修正)

注:这些时正在看设计模式方面的内容,仔细了解后发现DNN中数据访问方式应该是使用的简单工厂模式(看见有的书上说它是反射工厂,我觉得他是利用.NET的反射技术实例化对象的简单工厂,希望再不要说错了),详细说明将另写文章说明。特此声明一下以免误导大家。(2005-06-23)

  DNN的核心框架表的数据访问方式是采取单件模式(Singleton)和抽象工厂模式(Abstract Factory)结合的方式来实现的。(各个用户模块的数据访问方式好像也是这样的)
  单件模式(Singleton):用来确保程序只有一个数据访问点。
  抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  DataProvider(components\Providers\Data\DataProvider.vb)就是这样的一个抽象类,它提供了系统所需的访问数据库操作的全部接口,SqlDataProvider(Providers\DataProviders\SqlDataProvider\SqlDataProvider.vb)是DataProvider的一个子类,它提供了访问SQLServer数据库的具体实现。在使用的时候我们只需调用“DataProvider.Instance().要用到的方法”即可。至于返回何种子类则在DataProvider类中构造函数调用CreateProvider()动态的构造具体的子类。
动态构造何种子类的设置,则完全由用户在配置文件中设置。如:
     <!-- data默认的Provider是SqlDataProvider -->
    
< data  defaultProvider ="SqlDataProvider" >
      
< providers >
        
< clear  />
        
<!-- Provider的详细信息 -->
        
< add  name ="SqlDataProvider"  type ="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"  connectionStringName ="SiteSqlServer"  upgradeConnectionString =""  providerPath ="~\Providers\DataProviders\SqlDataProvider\"  objectQualifier =""  databaseOwner ="dbo"   />
      
</ providers >
    
</ data >
这样如果我们需要用Oracle数据库,只需要编写一个OracleDataProvider子类实现DataProvider中的接口就行了。然后将配置文件的信息修改如下即可。
     < data  defaultProvider ="OracleDataProvider" >
      
< providers >
        
< clear  />
        
<!-- Provider的详细信息 -->
        
< add  name ="OracleDataProvider"  type ="DotNetNuke.Data.OracleDataProvider, DotNetNuke.OracleDataProvider"  connectionStringName ="SiteSqlServer"  upgradeConnectionString =""  providerPath ="~\Providers\DataProviders\OracleDataProvider\"  objectQualifier =""  databaseOwner =""   />
      
</ providers >
    
</ data >
  这种数据访问方式能够灵活的配置应用程序使用的数据库,而且每个用户模块都有自己独立的DataProvider,应该是可以实现不同的用户模块使用不同的数据库。我现在还在看系统框架的东西,关于不同用户模块是否是可以使用不同数据库的问题还不能肯定,不过我想是可以的。

更多相关内容>>

你可能感兴趣的:(数据)