对抽象工厂+反射+配置文件的实例理解

原创 2015年11月18日 20:40:41

第一遍学习设计模式时,总有飘飘然的感觉.《大话设计模式》这本书虽然读起来挺有趣味,也感觉比其他讲设计模式的书好理解一些。但是真要用在机房收费系统时还是费劲的。米老师讲过:思想要上移,行动要下移。这两点要紧密结合,缺一不可。总在思想层面上绕,比如设计模式中所举的生活中的例子,用在代码中却不是那么容易,所以必须要行动下移,认真实践。而总在代码中绕,不进行总结提炼概括,学习就很局限,所以我们也要不断总结,思想上移。第二遍学习抽象工厂是在机房收费系统中,我想讲讲使用它的过程。

一.为什么要用抽象工厂

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


图中的红色框是IDAL(接口)。我举个生活中的例子接电的插口来理解。同一个插口我们可以插电脑,电视,电冰箱等等。只要插头与插口的规格一致就可以。对于这张包中可以看到整个逻辑从UI到IDAL就结束了,后面的D层和Helper要看具体情况,实现接口的可以使SqlDAL,也可以使AccessDAL。

二.反射和配置文件是起什么作用的。

《大话设计模式》中讲过抽象工厂的优点和缺点。缺点之一就是需求增加时,比如要增加一张表。就要至少更改三个类。IFactory,SqlFactory,AccessFacotry...所以采用了简单工厂来改进抽象工厂,而在简单工厂中的实例化需要通过分支判断语句来判断。这里就引入了反射,反射主要来解决分支判断的问题,使得实例化更加地方便。具体如何灵活需要通过实例讲解。

反射使用格式:Assembly.Load("程序集名称").CreateInstance("命名空间.类名称“)

刚开始感觉很晕,不明白程序集名称应该是什么?命名空间又是指得哪个?反射是用来解决分支判断问题的,使得实例化更加方便。程序集一定是要具体实例化的地方。这里就是指D层,默认情况,程序集名称和命名空间是同样的。这里都是SqlDAL,当然如果是AccessDAL,程序集名称就是指AccessDAL了。说它灵活是指可以使用配置文件指定具体是Sql还是Access。而具体的类名称就要看你实现的是什么功能了。如果是登录,那么就是UserDAL(类名称)

三登录实例应用

我按一条线的顺序给出代码:

B层:

  1. ''' <summary>  
  2. ''' 验证用户是否存在  
  3. ''' </summary>  
  4. ''' <param name="enUser">用户实体</param>  
  5. ''' <returns>DataTable</returns>  
  6. ''' <remarks></remarks>  
  7. Public Function ExistUser(ByVal enUser As Entity.UsersEntity) As DataTable  
  8.     Dim iu As IDAL.IUser  
  9.     Dim dt As New DataTable  
  10.     iu = Factory.DataAccess.CreateUser()    '由于是shared定义的函数,这里直接调用,不用实例化。  
  11.     dt = iu.SelectUser(enUser)  
  12.     Return dt  
  13. End Function  
工厂:

  1. Private Shared ReadOnly db As String = ConfigurationManager.AppSettings("DB")  
  2. Private Shared ReadOnly assemblyName = db + "DAL"  
  3. ''' <summary>  
  4. ''' 使用反射和配置文件创建相应的接口  
  5. ''' </summary>  
  6. ''' <returns>IUser接口</returns>  
  7. ''' <remarks></remarks>  
  8. Public Shared Function CreateUser() As IDAL.IUser  
  9.     Dim className As String = assemblyName + "." + db + "UserDAL"  
  10.     Return CType(Assembly.Load(assemblyName).CreateInstance(className), IDAL.IUser)   '调用反射  
  11. End Function  

接口:

  1. ''' <summary>  
  2. ''' 登录时查询用户是否存在.  
  3. ''' </summary>  
  4. ''' <param name="enUser">参数为用户实体</param>  
  5. ''' <returns>datatable ,将userPassword,level,作为表中的两列返回</returns>  
  6. ''' <remarks></remarks>  
  7. Function SelectUser(ByVal enUser As Entity.UsersEntity) As DataTable  
D层的命名空间是SqlDAL,类名称为SqlUserDAL。

配置文件:

  1. <appSettings >  
  2.   <add key="DB" value="Sql"/>  
  3. </appSettings>  
四.总结:多实践,多总结。

版权声明:本文为博主原创文章,未经博主允许不得转载。

对抽象工厂+反射+配置文件的实例理解

第一遍学习设计模式时,总有飘飘然的感觉.《大话设计模式》这本书虽然读起来挺有趣味,也感觉比其他讲设计模式的书好理解一些。但是真要用在机房收费系统时还是费劲的。米老师讲过:思想要上移,行动要下移。这两点...
  • wangyajin333
  • wangyajin333
  • 2013年11月27日 21:44
  • 2052

抽象工厂+反射+配置文件 实现数据访问程序

《大话设计模式》中第15章中《就不能不换DB吗?》引出了我今天要谈论的主题:抽象工厂+反射+配置文件 实现数据访问程序。当时也不甚理解啊!到了机房收费的亲身实践中,终于体会到了这对组合的奥秘。 抽...
  • haovip123
  • haovip123
  • 2014年08月22日 19:25
  • 3464

抽象工厂+反射+配置文件

配置文件如下: 首先需要在命名空间里引用: Imports System.Configuration  ‘引用配置文件 Imports System.Reflection         ’...
  • wrs120
  • wrs120
  • 2017年03月12日 21:15
  • 280

C#反射和抽象工厂的结合

读了这篇文章对C#的反射机制和抽象工厂的概念有了一些了解,本人认为是一篇好文章。以下文字转载自:http://blog.csdn.net/zhlyyea/archive/2008/02/23/2114...
  • hejialin666
  • hejialin666
  • 2010年04月26日 16:59
  • 1995

结合Java反射用简单工厂模式改进抽象工厂模式

前一篇简单介绍了抽象工厂模式,结合Java的反射机制,可以用简单工厂模式来改进抽象工厂模式,减少类的数量,增加可维护性。UML图如下: 去除IFactory、SqlserverFacto...
  • sdauzxl
  • sdauzxl
  • 2016年08月20日 12:01
  • 1003

如何应对数据库更换(三层架构+抽象工厂+反射+配置文件)

引言在项目开发中,数据库的更换是需要考虑的问题,不同的数据库有着不同的访问方式,不同的SQL语法。恐怕最让人头疼的是项目开发完了,用户提出了更换数据库的要求,修改并不是一件容易的事儿。那么如何应对修改...
  • u013201439
  • u013201439
  • 2016年04月16日 20:57
  • 1321

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

三层的例子敲的差不多了,为了对抽象工厂有个更好的理解,开始对三层进行加工,下面来对三层进行逐步更新,首先是看一下我画的包图:                             包图为大家从宏观...
  • wangdan199112
  • wangdan199112
  • 2014年04月04日 17:40
  • 1586

关于对反射机制的通俗理解

关于反射机制的理解,反射其实就是照镜子的过程,通过照镜子,镜子里的镜像 能获取你的属性和行为。 1. 首先要先有一个定义了自身的本体(Class A),里面必须有一个无参的构造函数 2. 所有的镜子...
  • qq_35699070
  • qq_35699070
  • 2017年10月24日 22:13
  • 122

且谈谈我对Java反射的理解

Java培训、Android培训、iOS培训、.Net培训、期待与您交流!  在张老师的课程当中,谈到了反射的概念,用冯伟立学长的最简单的一句话来说就是:反射就是把Java类中的各种成分映射成相应的J...
  • piaoyi493279486
  • piaoyi493279486
  • 2015年05月10日 20:00
  • 2084

使用Java反射跟简单工厂模式改进抽象工厂模式

结合Java的反射机制,可以用简单工厂模式来改进抽象工厂模式,减少类的数量,增加可维护性。UML图如下: 去除IFactory、SqlserverFactory和AccessFact...
  • baidu_36327010
  • baidu_36327010
  • 2017年03月01日 09:52
  • 174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对抽象工厂+反射+配置文件的实例理解
举报原因:
原因补充:

(最多只允许输入30个字)