·DAL 层 :
public class UserManager{ ...... }
DAL 层的对象装备到 BLL 层中使用。
SQL Server 和 Oracle 之间切换的话,就很有可
能需要
SQLDAL 和 OracleDAL 两套数据访问层。因为以前已经引入的接口,各种数据库无非就是不同的
实现
IDAL 层的方式而已,对 BLL 层没有影响。如果切换数据库的话,工厂中的各个 Create 方法中需要
返回的对象,就必须改成不同的
SQL 和 Oracle 对象。
比如:
return new SQLUserManager(); 或者 return new OracleUserManager();
切换数据库时,工厂中的所有
DAL 对象都需要变成另外一类,数量大的情况下,修改也是相当费力,所
以,一般考虑数据库切换一个或多个的情况下,在设计工厂中
Create 方法时,会使用:
public class DataAccess
{
private static string dbName = "SQL";
public static IUserManager CreateUserManager()
{
if(dbName == "SQL") return new SQLUserManager();
if(dbName == "Oracle") return new OracleUserManager();
}
}
通过一个字符串的判断,确定当前需要的
DAL 对象类型,维护时,只需要修改 dbName 就可以实现切
换。
这样做的好处显而易见,但问题也同样存在。如果现在需要另一种
Access 数据库的切换,肯定需要再加
一条:
if(dbName == "Access") return new AccessUserManager(); DAL 对象很多,需要加的就
很多,还是很麻烦。这时大家可能发现,各种数据库对应的
UserManager() 的区别就在一个名字上,而
很规范,如何根据名字动态产生对应的数据库
DAL 对象呢?反射!