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

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

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

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

     1. 先进行配置文件操作

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

     ( 2 )在配置文件中添加参数

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

    ( 3 )在要用到配置文件的项目中添加引用 System .configuration (在机房重构中Factroy 项目用到了配置文件):在 Factroy
中选择添加引用。

( 4 )引用界面如下:

 在左边“程序集”栏中找到“框架”从右边找到“ 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(接口)

学习小结:

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

时间: 2024-10-25 03:46:43

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

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

[本文转自简单工厂.工厂方法.抽象工厂.策略模式.策略与工厂的区别] 结合简单示例和UML图,讲解工厂模式简单原理. 一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上 Audi后他说"开奥迪车!".你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们

思想上移,行动下移——抽象工厂+反射+配置文件

  从网上查找资料的时候发现很多同学都写过这篇博客了,可见我的方向没有跑偏.虽然我们学设计模式的时候已经接触过抽象工厂模式,大话设计模式中每个设计模式都紧密联系生活,而且主人公讲的也相当有趣,但是真正运用起来却没那么简单.可以说小菜只是帮我们理解了各个设计模式的用途以及优缺点,真正的理解还需要我们自己动手实践.   为什么要用抽象工厂?   主要就是为了提高软件的灵活性,运用抽象工厂+反射+配置文件可以很方便的更换数据库.引入接口之后,就可以对外提供一致的接口,而我们既可以用SQLServer实

asp.net-Asp.Net抽象工厂 通过反射获取配置文件信息,为什么DAL层的dll文件无法生成到UI层,而简单工厂可以?

问题描述 Asp.Net抽象工厂 通过反射获取配置文件信息,为什么DAL层的dll文件无法生成到UI层,而简单工厂可以? 使用抽象工厂三层做程序的时候,程序报错"系统找不到指定的文件".网上百度后,把DAL层生成dll的路径指向UI层的bin目录下,问题解决.程序能正常读取数据库数据.解决完这个问题后,我写了一个简单三层程序,发现简单三层的程序,运行的时候,DAL层的dll文件能自动生成到UI层,不需要修改DAL层的指向路径.请问,抽象工厂三层出现这个问题的原因是什么?为什么简单三层不

三层加抽象工厂加反射加配置文件加SqlHelper

              三层的例子敲的差不多了,为了对抽象工厂有个更好的理解,开始对三层进行加工,下面来对三层进行逐步更新,首先是看一下我画的包图:                             包图为大家从宏观上展示了程序各层之间的调用关系,现在用类图展示一下详细的调用关系:                            通过包图和类图能够比较清晰的知道各个包之间的调用关系,通过时序,可以清晰的知道这些调用关系的顺序,我们在写代码的时候是从D层开始写的,当然没有那么绝对,

Asp.Net抽象工厂 通过反射获取配置文件信息,为什么DAL层的dll文件无法生成到UI层,而简单工厂可以?

问题描述 使用抽象工厂三层做程序的时候,程序报错"系统找不到指定的文件".网上百度后,把DAL层生成dll的路径指向UI层的bin目录下,问题解决.程序能正常读取数据库数据.解决完这个问题后,我写了一个简单三层程序,发现简单三层的程序,运行的时候,DAL层的dll文件能自动生成到UI层,不需要修改DAL层的指向路径.请问,抽象工厂三层出现这个问题的原因是什么?为什么简单三层不用修改DAL层的生成路径,而抽象工厂三层需要修改才能正常运行?配置文件中的节点中的内容应该是没有错误的,里面的v

java使用dom4j解析xml配置文件实现抽象工厂反射示例_java

逻辑描述: 现在我们想在B层和D层加上接口层,并使用工厂.而我们可以将创建B和创建D看作是两个系列,然后就可以使用抽象工厂进行创建了. 配置文件:beans-config.xml.service-class与dao-class分别对应两个系列的产品.子菜单中id对应接口的命名空间,class对应实现类的命名空间. 复制代码 代码如下: [html] view plaincopyprint?     <?xml version="1.0" encoding="UTF-8&

【机房重构】一步一步往上爬——验收给了我什么

整个机房重构过程中,一共经历了两次验收.一次是关于系统编程:一次是关于画图与文档,每一次,师父都是耐心.细心地指导.要问验收给了我什么,看下面的博客内容便清楚了. 个人机房重构可分为两个阶段,前期主要是代码的编写,后期主要是画图. 在前期阶段,慕夏师父也是非常关心我的进展,时常来我这里看看,问问我有什么问题,抓住这几次机会,师父也是和我说了很多,从而对整个机房收费系统的业务逻辑更加清楚了.刚开始接触到抽象工厂+配置文件+反射的时候,除了茫然还是茫然,几天下来没有什么成果,登录的主线也没有完全明白

【机房重构】一步一步往上爬——七层中的那些事

机房重构开始已经一个多星期了,从最开始的理解登录到现在已经成功完成至少一次的"增"."删"."改"."查"的操作,现在在七层的这个大环境下,从最开始的奄奄一息,终于变得生龙活虎起来了. 之前总是听师哥师姐们说,敲完登录一条线了,后面就会很顺利了.可是,从我来说,事实并非如此.然而,磕磕绊绊,四个字足以形容我的这些天.不过,我心态好,我可以忍受一个人花时间调代码的孤独,再说,我也可以找小伙伴.找师父帮助我,我有什么理由不成功.

【机房重构】一步一步往上爬——不仅仅是三层

不知道大家还记不记得之前学习的UML中一个单独列出来的一种图,也就是这次我想说的包图.那个时候,让我们画机房收费系统的各种图,用例图.类图等等,通过自己反复琢磨,还都勉勉强强画出来了.唯独只有包图,我是一点东西也没有画上,只是见到了传说中的"包"是长什么样子的. 现在到了机房重构的阶段了,之前也学习了三层,终于是知道了包图该怎么画了.但也不仅仅是理解了包图,而且也是见证到了包图是如何在一步一步层层升级的.下面就将用一个机房系统中的登录实例来看看为什么说<不仅仅是三层>. 三