-数据层的反射工厂模式
墨初 知识笔记 75阅读
在IssueTracker项目中,用户可以选择使用Access数据库或SQL Server。通过Web.config文件中的add key=' data access type ' value=' aspnet . starter kit . issue tracker . data access layer . sqldataaccesslayer '/进行配置。如何实现这个功能,本项目采用的是反射工厂模式。一般来说,反射就是编译的时候,不知道会生成什么对象。根据配置内容,在运行时生成相应的对象。在项目中的实现如下:首先在code/dal/DataAccessLayer.cs中定义抽象类DataAccessLayerBaseClass,在这个类中定义所有用于数据操作的抽象方法。AccessDataAccessLayer.cs和SqlDataAccessLayer.cs继承DataAccessLayerBaseClass实现Access和SQL。
family: 'Times New Roman'">数据库的数据操作。
">-font-family: 'Times New Roman'">在Code/DAL/DataAccessLayer.cs">-font-family: 'Times New Roman'">的

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
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
从而使得方法返回正确的数据操作对象。
标签: