在调用一个自定义的GeneralHandler类里面的一个方法,该方法是针对数据库的一张表的所有操作(CRUD),根据传入的DealType来判断做那种操作

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace WinFormPro
{
/// <summary>
/// 接收外部访问的处理类
/// </summary>
public class GeneralHandler
{
/// <summary>
/// 处理报价单的方法(增删改查)
/// </summary>
/// <param name="quote"></param>
/// <param name="dealType"></param>
/// <returns></returns>
public QuoteHandlerReturnModel DealQuote(Quote quote, string dealType)
{
QuoteHandlerReturnModel returnModel = new QuoteHandlerReturnModel();
QuoteService quoteHandler = new QuoteService();
Type type = quoteHandler.GetType();
MethodInfo[] quoteMethodList = type.GetMethods(BindingFlags.Instance | BindingFlags.Public);
foreach (var method in quoteMethodList)
{
if (dealType.Equals(method.Name,StringComparison.OrdinalIgnoreCase))
{
returnModel=(QuoteHandlerReturnModel)method.Invoke(quoteHandler, new object[] { quote });//这里代替了那些if-else的判断(但是前提是:这些被调用的方法必须有相同的参数)
}
}

return returnModel;
}
}

/// <summary>
/// 操作数据库报价单的Service
/// </summary>
public class QuoteService
{
public QuoteHandlerReturnModel Create(Quote quote)
{
//todo:向数据库增加报价单
return new QuoteHandlerReturnModel();
}
public QuoteHandlerReturnModel Delete(Quote quote)
{
//todo:在数据库中删除一条报价单
return new QuoteHandlerReturnModel();
}
public QuoteHandlerReturnModel Update(Quote quote)
{
//todo:在数据库中更新这条报价单
return new QuoteHandlerReturnModel();
}
public QuoteHandlerReturnModel Get(Quote quote)
{
//todo:在数据库中更新这条报价单
return new QuoteHandlerReturnModel();
}
}
/// <summary>
/// 报价单Model
/// </summary>
public class Quote
{
public int Id { get; set; }
public string QuoteNo { get; set; }
public string OwnerName { get; set; }
public DateTime QuoteDate { get; set; }
}

/// <summary>
/// 所有的报价单操作的方法的返回值类型
/// </summary>
public class QuoteHandlerReturnModel
{
public bool IsSuccess { get; set; }
public Quote quote { get; set; }
}
}

使用反射代替不断添加的if-else来实现代码的可扩展性的更多相关文章

  1. LINUX安装SVN+添加自动同步+远程下载最新代码

    LINUX安装SVN+添加自动同步+远程下载最新代码---------------------1. 新建一个用户:svnroot ,以下操作非特别说明皆为root用户操作--------------- ...

  2. PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]

    PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解] 利用反射来实现工厂模式的生产而无需创建特定的工厂类 本文地址http://janrs.com/?p= ...

  3. JQeury添加和删除class内部实现代码(简化版)

    下面是JQuery对元素class操作的简单实现,请看代码: 添加class: //增加class function addClass(elem,value) { var classes, cur, ...

  4. C#通过Ado.net对连接数据库并进行添加删除等常规操作的代码

    如下资料是关于C#通过Ado.net对连接数据库并进行添加删除等常规操作的内容. static string sqlcon = "server=.;database=;Integrated ...

  5. VC6.0 中 添加/取消 块注释的Macro代码

    SAMPLE.DSM是微软提供的样例,使用的是vb语言.其中的 CommentOut 函数,是支持块注释的,可是这种/**/的注释方式,有时候用起来不是很方便,因为两个/会因为一个/而终止.对于大块代 ...

  6. java反射与多态(父类调用子类)的代码演示

    package Test0817; import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method ...

  7. 动态插入、添加删除表格行的JS代码

    <html> <head> <title>Table对象的方法</title> <script language="JavaScript ...

  8. 35W行数据的文本文件,每500行添加4个换行符。代码实现思路

  9. Jenkins--Credentials添加证书从git上拉代码

    直接上图:

随机推荐

  1. HDU 2106 母猪的故事

    http://acm.hdu.edu.cn/showproblem.php?pid=2160 Problem Description 话说现在猪肉价格这么贵,著名的ACBoy 0068 也开始了养猪生 ...

  2. localStorage存储数组,对象,localStorage,sessionStorage存储数组对象

    localStorage存储数组,对象,localStorage,sessionStorage存储数组对象   前言 最近在用angular做商城购物车的功能模块,因为angular的watch监听, ...

  3. Linux进程调度策略的发展和演变(转)

    转发:http://blog.csdn.net/gatieme/article/details/51701149  1 前言 1.1 进程调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他 ...

  4. ldap添加memberof支持

    安装请查看上一篇博客,传送门:https://www.cnblogs.com/crysmile/p/9470508.html 如果使用LDAP仅仅作为用户统一登录中心,则参考安装文档即可:如果ldap ...

  5. 概率主题模型简介 Introduction to Probabilistic Topic Models

    此文为David M. Blei所写的<Introduction to Probabilistic Topic Models>的译文,供大家参考. 摘要:概率主题模型是一系列旨在发现隐藏在 ...

  6. 题解 CF762A 【k-th divisor】

    emmm...不能说是水题吧...小金羊以为考的是STL(手动滑稽)... 行,这个题说让分解因数(不一定非得质因数). 我们考虑到有第k个数有可能有\(x\cdot x=n\)的毒瘤情况, 并且题目 ...

  7. Active Directory PowerShell模块收集AD信息

    0x00 前言简介 Microsoft为Windows Server 2008 R2(以及更高版本)提供了多个Active Directory PowerShell cmdlet,这大大简化了以前需要 ...

  8. mac 使用tree命令

    下载软件包: http://mama.indstate.edu/users/ice/tree/ 安装说明: http://www.qiansw.com/mac-os-x-install-tree-co ...

  9. java多线程 -- ConcurrentHashMap 锁分段 机制

    hashtable效率低ConcurrentHashMap 线程安全,效率高 Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器 的性能. Conc ...

  10. poi导出word表格详解 超详细了

    转:非常感谢原作者 poi导出word表格详解 2018年07月20日 10:41:33 Z丶royAl 阅读数:36138   一.效果如下 二.js代码 function export_word( ...