在调用一个自定义的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; }
}
}

转载于:https://www.cnblogs.com/xiaosongluffy/p/3715389.html

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

  1. php给图片加图片水印,php给图片添加文字或图片水印实现代码

    原标题:php给图片添加文字或图片水印实现代码 一.文字水印 文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件.效果图如下: $dst_path = 'dst ...

  2. 无法执行添加/移除操作,因为代码元素**是只读的

    在vs中,大量添加窗体或者控件后,发现无法由系统IDE自动生成代码,如自动添加按钮响应函数等,rc管理器界面双击按钮添加函数,会出现 提示框 "无法执行添加/移除操作,因为代码元素**是只读 ...

  3. 安卓应用安全指南 5.3.1 将内部账户添加到账户管理器 示例代码

    5.3.1 将内部账户添加到账户管理器 示例代码 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY ...

  4. 怎么把竖列中的数相加python_关于python中pandas.DataFrame对行与列求和及添加新行与列示例代码...

    pandas是python环境下最有名的数据统计包,而DataFrame翻译为数据框,是一种数据组织方式,这篇文章主要给大家介绍了关于python中pandas.DataFrame对行与列求和及添加新 ...

  5. 删除iPhone邮箱smtp服务器,教你iPhone邮件怎么添加删除附件及iPhone特殊代码分享...

    中国邮箱网讯 12月11日消息 iPhone自带的邮件应用中找不到添加附件的选项,该怎么给邮件添加附件,收到带有附件的邮件又该怎么快速删除多有附件呢?下面我们就来看看详细的教程. 一.邮件添加附件 1 ...

  6. html中加入音乐播放器,HTML网页添加音乐播放器做背景音乐代码-标签audio

    是 HTML 5 的一个新标签,定义声音,比如音乐或其他音频流. 调用格式: src="http://sc1.111ttt.com/2016/1/02/04/195040016323.mp3 ...

  7. java 反射 systemproperties,Android添加自己的系统属性(反射调用SystemProperties)

    我们可以通过调用SystemProperties.java类设置和获取系统的属性,但是这个类目前是hide的.也就是我们在开发的时候想直接调用时不可以的.除非你是在系统层上面的开发. 这里通过Andr ...

  8. c++ 编译添加dll_linux下编写C/C++代码须知———串讲

    一.C/C++的编辑编译与链接 敲代码的过程就是编辑过程,在编辑完成程序后需要经过编译和链接两个步骤才可以把程序变成我们所需要的可执行程序. 编译过程(包括预处理.编译,汇编(test.s到test. ...

  9. python贴吧发帖脚本-Python实现自动添加脚本头信息的示例代码

    前言 每个人写脚本时的格式都会有所不同,有的会注明脚本本身的一些信息,有的则开门见山,这在小团队里其实没什么,基本别人做什么你也都知道,但如果放到大的团队就比较麻烦了,因为随着人数的增多,脚本成指数增 ...

最新文章

  1. Gatling教程系列一简单GET请求测试(二)
  2. python处理流程-Python异常处理大全(二)
  3. 关于打印机共享的注意事项——又被叫去修电脑了
  4. windbg断点学习总结
  5. python inspect模块
  6. Ubuntu中update-alternatives命令(版本切换)
  7. Sharepoint学习笔记—ECM系列--文档集(Document Set)的实现
  8. activiti 7中文文档_如何阅读文档-以Pandas库为例
  9. 全部博文集锦第三期CHM文件,及十三个经典算法研究PDF文档
  10. 京东股价创新高:市值首次突破千亿美元 !
  11. 百度AI语音语义一体化技术 识别的同时进行语义分析
  12. 为什么运行review manager很卡顿_手机明明没坏,为什么声音开到最大依然很小?原来问题在这里...
  13. 类的加载顺序(例题)
  14. ATL之深入浅出书评(转)
  15. 2021龙川隆师中学高考成绩查询入口,2021年河源中考成绩和分数线什么时候公布(附查询入口)...
  16. 查看服务器上Docker镜像 latest具体版本
  17. Hadoop 安装指南
  18. 如何评价红米 Note 11T系列手机?网友:没有不足
  19. 电脑没有WiFi断网代码56解决方法CCleaner下载
  20. 对扫描的pdf文件生成目录

热门文章

  1. [转]Redis集群的配置
  2. 在EXCEL中如何将一列中的相同值的数据行找出来?
  3. healthd: battery l=1 v=0 t=27.0 h=2 st=1 chg=a 注释方法
  4. realARM s5pv210开发板wifi开机启动设置方法 开机启动linux应用程序
  5. 【拔刀吧少年】之sed编辑器
  6. 如何查看eas源代码_MT5CTP扩展:MT4源代码(EA)适配器来了
  7. android多渠道 依赖,android 不同渠道 添加不同依赖jar 使用不同代码
  8. GitHub Token的使用
  9. virtualenv创建python项目虚拟环境
  10. 细说双 11 直播背后的压测保障技术