机房重构准备工作(3)---反射+抽象工厂
来源:互联网 发布:华硕超频软件 编辑:程序博客网 时间:2024/06/10 17:52
在做机房重构的时候,感觉就像在玩一个俄罗斯套娃一样,需要一层层的剥开,然后逐渐弄懂每一个过程。在前几次的实践之后,终于到了搞反射的时候了
反射,在学习设计模式的时候有学到过,但是给的内容却不是很多,书里边只强调了一些基本的格式要求比如说在使用反射的时候要先引用Reflection,然后按照
Assembly.Load(“程序集名称”).CreateInstance(“命名空间.类名称”)的格式去书写就可以了
书中描述的很简单,但是在执行的却并没有那么简单。
在明白反射之前,我觉得有必要明白为什么要使用反射:在设计模式的书中,小菜的公司要求更换数据库,所以用到了反射的机制。那么在机房重构中,可能也不单单使用SQL Server数据库,如果在后期更换数据库的话,再修改代码,就和开闭原则相悖离了,所以在机房重构中要引用到反射的机制。其次,在使用反射的时候要做哪些工作:首先要有一个配置文件“APP.Config”在U层添加配置文件,配置文件中写明自己要使用的数据库:
<appSettings> <add key="DB" value="sql"/> <add key="yu" value="DAL"/> </appSettings>
然后再去工厂层进行代码的编写:
1.首先要引用Reflection
Imports System.Reflection
2.读取配置文件中的内容
Private Shared ReadOnly AssemblyName As String = ConfigurationManager.AppSettings("yu") '定义程序集名称变量,D层命名空间的名字 参照配置文件中的数据 Dim strDB As String = ConfigurationManager.AppSettings("DB") '表示读取配置文件
3.利用反射
'创建用户表的工厂 Public Function CreateUserInfo() As IDAO.IUser Dim className As String = AssemblyName + "." + "yu" 'AssemblyName是程序集的名称,db+UserDAL是DAL层中的SQLServerUserDAL的类名, '之所以配置文件中写SQLserver,是因为D层中类名是SqlServerUserDAL. '如果不用SQLserver数据库,那么就在factory中再建一个类,比如访问Access数据库,那么类名就叫做AccessUserDAL Return CType(Assembly.Load(AssemblyName).CreateInstance(className), IUser)’这里就是书中提到的格式内容 '将实例化D层类通过向上转型转换为接口类,然后通过调用接口类中的函数来调用D层中实现该接口的函数End Function
但是仅仅这些还是不够的,在整理反射的时候,还会遇到其他的问题因为机房登录采用的是七层登录,但是在七层登录当中D层并没有其他的层能调用(引用)到D层,所以在反射的时候肯定会报错,在报错是该怎么做呢?
工厂层完整代码如下:
Imports System.ReflectionImports IDAOImports System.Data.DataTablePublic Class FacatoryUser '利用反射+配置文件+抽象工厂 Private Shared ReadOnly AssemblyName As String = ConfigurationManager.AppSettings("yu") '定义程序集名称变量,D层命名空间的名字 'Dim strDB As String = ConfigurationManager.AppSettings("DB") '表示读取配置文件 '创建用户表的工厂 Public Function CreateUserInfo() As IDAO.IUser Dim className As String = AssemblyName + "." + "UserDAL" 'AssemblyName是程序集的名称,db+UserDAL是DAL层中的SQLServerUserDAL的类名, '之所以配置文件中写SQLserver,是因为D层中类名是SqlServerUserDAL. '如果不用SQLserver数据库,那么就在factory中再建一个类,比如访问Access数据库,那么类名就叫做AccessUserDAL Return CType(Assembly.Load(AssemblyName).CreateInstance(className), IUser) '将实例化D层类通过向上转型转换为接口类,然后通过调用接口类中的函数来调用D层中实现该接口的函数 End FunctionEnd Class
0 0
- 机房重构准备工作(3)---反射+抽象工厂
- 机房重构之配置文件、反射和抽象工厂
- 【机房重构】 抽象工厂+反射+配置文件(上)
- 【机房重构】 抽象工厂+反射+配置文件(下)
- 【机房重构】工厂+反射
- 重构机房收费系统总结1之配置文件+反射+抽象工厂
- 机房重构 之 抽象工厂+反射+配置文件 实现数据库访问
- 【个人机房重构】—— 抽象工厂+反射+配置文件详解以及错误分析
- 【.NET机房重构】——再看抽象工厂加反射实现登录
- 机房重构准备工作(4)--错误整理
- 【机房重构】C#抽象工厂+配置文件在机房中的应用
- 个人重构——抽象工厂+反射+配置文件
- 机房收费系统—抽象工厂+反射+配置文件
- 机房收费系统之抽象工厂模式+配置文件+反射
- 机房收费系统重构(三)—工厂+反射+DAL
- 机房重构准备工作(1)-----方法+实例化
- 机房重构的准备工作--从整理思路到画图
- 机房重构准备工作(5)--数据库建表
- 单例模式
- spring-data-jpa更新实体
- C3p0数据库连接池的使用
- 几种按键扫描软件处理方法
- Object-c 基础 不可变数组与可变数组
- 机房重构准备工作(3)---反射+抽象工厂
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 菜鸡只会ABC!
- 转接IC MS7024:RGB转CVBS/S-Video芯片
- 买不到的数目
- 轻巧方便的触摸滑动插件-swiper,常用参数整理(一)
- java编程思想 -- 关于构造器
- mysql行列转换方法总结
- 无法检索 的元数据,无法识别的元素provider
- 数位DP