Tim Blog

IssueTrackerCSVS 代码笔记-数据层的反射工厂模式

IssueTracker项目中,用户可以选择使用Access数据库或者是SQL Server。通过Web.config文件中的
  <add key="DataAccessType" 
       value="ASPNET.StarterKit.IssueTracker.DataAccessLayer.SQLDataAccessLayer" />  进行配置。

如何实现这个功能,在此项目中使用了反射工厂模式。

反射通俗的说,就是在编译的时候,不知道将要生成的对象是什么。在运行时才根据配置内容,生成相应的对象。
在项目中实现方式如下:
首先定义了抽象类DataAccessLayerBaseClass Code/DAL/DataAccessLayer.cs中。在该类中定义对数据操作的所有抽象方法。AccessDataAccessLayer.csSQLDataAccessLayer.cs继承DataAccessLayerBaseClass,实现对AccessSql数据库的数据操作。

Code/DAL/DataAccessLayer.cs

 1public  class DataAccessLayerBaseClassHelper 
 2{
 3        public static DataAccessLayerBaseClass GetDataAccessLayer() 
 4           {
 5            Type trp = 
 6                Type.GetType(Globals.DataAccessType, true);
 7            // Throw an error if wrong base type
 8            if (trp.BaseType != 
 9                Type.GetType("ASPNET.StarterKit.IssueTracker.DataAccessLayer.DataAccessLayerBaseClass"))
10                throw new Exception( "Data Access Layer does not inherit DataAccessLayerBaseClass!");
11            DataAccessLayerBaseClass dc=  (DataAccessLayerBaseClass)Activator.CreateInstance (trp);
12            return (dc);
13        }

14}

15
 

Type trp = Type.GetType(Globals.DataAccessType, true); 这就实现了反射工厂的功能。在Globals.DataAccessType配置了是使用AccessDataAccessLayer还是SQLDataAccessLayer

从而使得方法返回正确的数据操作对象。

posted @ 2005-11-12 23:17  流沙  阅读(419)  评论(1编辑  收藏  举报