机房重构之配置文件、反射和抽象工厂-阿里云开发者社区

开发者社区> 数据库> 正文

机房重构之配置文件、反射和抽象工厂

简介:

    本次机房重构过程中用到了反射 配置文件,目的还是挺明确的:就是为了更换数据时方便,遵循开放 封闭原则,解决了可维护和可扩展的问题。

     以下就重构机房登录为例来看看配置文件 反射的用法。机房收费系统登录用到的数据库表是 User_info 表(用户表)。


 下面看看配置文件 反射 抽象工厂在登录时访问数据库 User 表时的用法:

     1. 先进行配置文件操作

    步骤:( )在 VS 资源管理器的项目 UI 中,打开App.config 文件。



      )在配置文件中添加参数


     分析:在配置文件中写明是 SQLServer 还是 Access ,防止更改应用程序中的代码,利于扩展,避免修改。

     )在要用到配置文件的项目中添加引用 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>

    分析:DAL 层中的类名是根据自己情况起的,不必一定前面加上 Sqlserver 或者 Access 。只要是一个标志,标识成这个类的代码是访问的 SQLServer 数据库,这个类的代码是访问的 Access 数据库的就行。配置文件根据情况更改就行。

(2)为什么要用抽象工厂

以备我们的软件要在不同数据库上运行,现在我们使用的是SQL Sever,而要使用Access或者Oracle等时就需要考虑了,抽象工厂可以使我们灵活地更换到其他数据库上。如何能够灵活结合UML图进行理解:

图中的蓝色框是IDAL(接口)




学习小结:

由于重构机房的这部分的应用,有一点时间了,感觉自己总是总结不好,就一直没有写,而现在感觉回过头来,再写一写总结感觉还是很不错的,至少又有了很多的感触。这部分虽然当时感觉蛮难搞定的的,花了不少的时间来处理,现在还是很好理解的,努力去实践吧!


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章