第一次接触 反射+抽象工厂的数据访问程序是在大话设计模式的154页,反射+配置文件实现数据访问程序是在大话设计的157页,而我第一次使用配置文件+反射+抽象工厂就是在机房收费系统个人重构。
大鸟说过:反射技术用来去除switch或if,解除分之判断带来的耦合,switch或者if虽然是程序里的好东西,但是应对变化却显的老态龙钟,而反射技术却可以很好的解决他们难以应对变化、难以维护和扩展的诟病。
而配置文件的好处就是解决更改数据库的问题,只要在配置文件里写明是DataAccess还是SqlServer,这样就不用去更改类了。
下面就以机房收费系统的登陆为例子,来介绍一下。
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key ="conn" value ="Server=192.168.24.167;Database=mycharge;User ID=sa;Password=123456"/>
<add key="DB" value ="Sqlserver"/>
</appSettings>
</configuration>
工厂层代码:
’****************************************************
’文件名:Login_FA
'命名空间:Factory
'内容:读取配置文件给DB字符串赋值,在配置文件中写明是SQLServer还是DataAccess.这样就不用去更改类了。
'功能:反射+配置文件+抽象工厂
’文件关系:
’作者:赵亚盟
’小组:XXX
’生成日期:2014-06-29 16:25:27
’版本号:V1.0.0.0
’修改日志:
’版本说明:
’****************************************************
Imports System.Reflection '添加反射的引用
Imports System.Configuration '添加配置文件的引用
Imports IDAL 'Factory层调用IDAL层
Public Class SqlServer
Private Shared ReadOnly AssemblyName As String = "DAL" '定义程序集变量名,D层命名空间的名字
Private Shared db As String = ConfigurationManager.AppSettings("DB") '表示读取配置文件
' ///depiction创建用户表的工厂
Public Function CreateUser() As IDAL.IUser
Dim className As String = AssemblyName + "." + db + "User_DAL" 'DAL 中的类名
Dim iuser As IUser '实例化接口IUser
'通过调用接口类中的函数去调用D层中实现该接口的函数。
iuser = CType(Assembly.Load(AssemblyName).CreateInstance(className), IUser)
Return iuser
End Function
End Class
总结:
用的还不是很熟练,还在学习中,有不对之处请指出。还在学习中,博客有待改正。