反射是.net的核心功能,十分的强大。但是好像微软封装的太过了,作为程序员,在实际项目中我很少用到反射(估计是参加的大型项目太少了,需要交互第三方的项目太少了)。

工厂模式是软件设计模式中重要的一种,在面向接口编程中,怎么把接口与实现接口的类进行关联而不是在程序中直接使用

                SupportLaw.Dal.Dic_Table dal = new SupportLaw.Dal.Dic_Table();

  这样违反了 具体不能依赖具体的(依赖倒置原则) 设计模式。通俗来点讲 这样直接做有主要两点的缺点:

1:dal里面会有大量的操作数据库代码。(东软生成也有很多哦)。每次new dal,其实我们只需要其中的一个(一类型)或者几个方法(这个就是接口哦)。都在实例化不是很浪费。

根据里氏替换原则,这里使用接口来实例化的类型(所以接口的设计部是东软生成啊!!我的设计一般是 添加修改删除 作为一个接口。查询(各种各样的查询) 作为另一个接口)。

                SupportLaw.IDal.IDic_Table dal = new SupportLaw.Dal.Dic_Table();

        2: 项目的可维护性。(公司真实的例子:公司一个项目面临演示,除了问题。这个项目从数据提取,数据处理,数据展示 三个人做的。。然后一个人加班另两个一起加班。苦逼!当然里面有各种各样的原因。其中最重要的原因就是 相互 依赖,没有统一的规则(接口))。为了项目的可维护性,为了以后需求变动的时候(软件项目经常的事情)。

好了。使用接口解决了上面的两个问题了,但是把实例化语句放在bll层处理也是不好的吧。因为你如果那样做了,你的bll层是必须引用 DAL IDal层。比不做改动之前你的项目引用的还要多一个IDal。这个时候我们需要一个中间层来处理接口与实现类的关联。因为具有统一的特性(这里用词不好,但是不知道用啥了)--给一个接口,返回一个接口实现类。所以这里用到了工厂。

传入的参数 泛型 T。具体代码如下:

 
        public static T Creat<T>()
{
string str = typeof(T).Name; //获取类型名称
Assembly assembly = Assembly.Load("SupportLaw.Dal"); //加实现类载程序集
Type[] types = assembly.GetTypes(); //获取所有类型
foreach (var t in types)
{
if (t.GetInterface(str) != null) //如果存在实现类继承了接口T,则返回实现T类,否则返回 default(T)
{
var userBll = (T)Activator.CreateInstance(t);
return userBll;
}
}
return default(T);
}

  

c# 反射应用之工厂的更多相关文章

  1. Java使用反射机制优化工厂方法

    我先举个例子,有一个接口People,这个接口有一个方法: package com.wjy.reflect; public interface People { public abstract voi ...

  2. [Java反射机制]用反射改进简单工厂模式设计

    如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...

  3. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  4. 基于C#反射机制的工厂模式

    简单介绍 反射提供了描写叙述程序集.模块和类型的对象(Type 类型). 能够使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或訪问其字段和属性. 假设代码中使用了特 ...

  5. 用反射技术替换工厂种的switch分支(14)

    首先给大家拜个晚年,祝大家新春快乐,万事如意,鸡年大吉. 好了,前面我们讲了很多的工厂模式,其中,有个很明显的特点,工厂中,有一个方法,里面有很多的swich case  分支,我们前面说过,我们可以 ...

  6. Java反射机制在工厂模式中的应用

    在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识. 首先看一下简单工厂模式 简单工厂模式(simple factory)是类的创建模式,又叫 ...

  7. Java反射机制与工厂模式

    工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...

  8. 简单架构:反射实现抽象工厂+IDAL接口完全独立DAL

    一.普通架构中存在的问题 StudentDB数据库,包含一张StudentInfoTB表,结构如下: s_id int primary key identity(1,1), s_name Nvarch ...

  9. Java反射机制(五):使用反射增强简单工厂设计模式

    关于简单工厂设计模式的讲解,可参考博文<设计模式: 简单工厂模式>,此处不再介绍:  我们先观察之前介绍的关于简单工厂: public class OperateFactory { pub ...

随机推荐

  1. 新课程开始的第二天,HTML基础制作

    天正式开始学习HTML的基础制作,有简单的指令开始入手. 第一天的学习,因为基础,所以觉得还算简单,主要是对网页背景.图片.文字.表格等的编辑,和一部分链接的使用. 由下面的的一个事例,通过所学的简单 ...

  2. MySQL自定义函数

    用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 自定义函数两个必要条件: 参数:可以有另个或多个 返回值:只能有一个 创建自定 ...

  3. Rdseed与SAC的安装

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  4. Numpy Study 2----* dot multiply区别

    使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,* ...

  5. 解决首次访问jenkins,输入默认密码之后,一直卡住问题

    简介   安装系统:centos6.5 安装方式:在官网中下载jenkins.war,放到tomcat根目录下的webapps中,启动tomcat(还有一种yum在线安装的方式) 1.首次访问,出现如 ...

  6. Forward和Redirect的区别

    一:间接请求转发(Redirect) 二:直接请求转发(Forward) 用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求 ...

  7. pdf预览-js版本

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. 初探Backbone

    Backbone简介 中文API:http://www.csser.com/tools/backbone/backbone.js.html 英文API:http://backbonejs.org/ B ...

  9. 使用 Sublime Text 2 开发 Unity3D 项目

    用 Sublime 已经有很长一段时间,很舒适,很贴心,根本停不下来.之前因为是开发页游,所以是用 AS3 开发,近段时间,新开了个手游项目,引擎方面选定了 Unity3D,老实说,之前没有太多的 3 ...

  10. C/C++面试题总结

    腾讯阿里面试题总结:1. 多态机制2. 排序算法(快排.堆排)3. 程序内存分配4. unix多线程5. 哈希查找6. oop特点7. 素数(优化)8. 字符串掩膜操作(内存紧凑)9. 多边形相交10 ...