本次机房重构过程中用到了反射 + 配置文件,目的还是挺明确的:就是为了更换数据时方便,遵循开放 - 封闭原则,解决了可维护和可扩展的问题。
以下就重构机房登录为例来看看配置文件 + 反射的用法。机房收费系统登录用到的数据库表是 User_info 表(用户表)。
下面看看配置文件 + 反射 + 抽象工厂在登录时访问数据库 User 表时的用法:
步骤:( 1 )在 VS 资源管理器的项目 UI 中,打开App.config 文件。
( 2 )在配置文件中添加参数
分析:在配置文件中写明是 SQLServer 还是 Access ,防止更改应用程序中的代码,利于扩展,避免修改。
( 3 )在要用到配置文件的项目中添加引用 System .configuration (在机房重构中Factroy 项目用到了配置文件):在 Factroy 中选择添加引用。
在左边“程序集”栏中找到“框架”从右边找到“ System .configuration ”这项勾选上。这样配置文件基本就完成!
2. 反射 + 配置文件 + 抽象工厂代码(访问 SQLServer 中重构机房的用户( User 表))
(1)添加代码
<span style="font-size:18px;">'************************************************* Imports System.Reflection '添加反射的引用 Imports System.Configuration '添加配置文件的引用 Imports IDAL Public Class SqlServerFactory '利用反射+配置文件+抽象工厂 Private Shared ReadOnly AssemblyName As String = "DAL" '定义程序集名称变量,D层命名空间的名字 Private Shared db As String = ConfigurationManager.AppSettings("DB") '表示读取配置文件,如果配置文件中是Sqlserver,就访问SQLServer数据库,如果是别的就访问别的,不用更改程序中的代码。 '创建用户表的工厂 Public Function CreateUserInfo() As IUser Dim className As String = AssemblyName + "." + db + "UserDAL" ' AssemblyName是程序集的名称,db + "UserDAL"是DAL层中的SqlServerUserDAL的类名。之所以配置文件中写Sqlserver ,是因为DAL层中类名是SqlServerUserDAL。如果不用SqlServer数据库,那么我在Factroy中再另建一个类,比如访问Access数据库,那么类名就叫AccessUserDAL。把配置文件中的Value值改为Access。这样就是扩展而不是修改。 Dim iuser As IUser '实例化接口IUser iuser = CType(Assembly.Load(AssemblyName).CreateInstance(className), IUser) ’将实例化的D层类通过向上转型转换成接口类,然后通过调用接口类中的函数来调用D层中实现该接口的函数。 Return iuser End Function End Class</span>
(2)为什么要用抽象工厂
以备我们的软件要在不同数据库上运行,现在我们使用的是SQL Sever,而要使用Access或者Oracle等时就需要考虑了,抽象工厂可以使我们灵活地更换到其他数据库上。如何能够灵活结合UML图进行理解:
图中的蓝色框是IDAL(接口)
学习小结:
由于重构机房的这部分的应用,有一点时间了,感觉自己总是总结不好,就一直没有写,而现在感觉回过头来,再写一写总结感觉还是很不错的,至少又有了很多的感触。这部分虽然当时感觉蛮难搞定的的,花了不少的时间来处理,现在还是很好理解的,努力去实践吧!