博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化AJAX提交到Handler的ProcessRequest方法
阅读量:6220 次
发布时间:2019-06-21

本文共 2940 字,大约阅读时间需要 9 分钟。

背景:

               上周搬到新组开发一个微信端的项目,发现这里前台页面部分都是ajax提交到handler,然后handler的ProcessRequest方法接收提交过来的参数,通过参数中的type选择要执行的方法(这里就是访问数据库的操作和一些业务逻辑的调用,分页等等),处理完成之后返回json串到ajax的success方法,然后显示。

        其实ajax提交到handler和提交到后台感觉没多大区别,百度了下,感觉handler是后台程序的简化版,执行更快。

        ok,今天说的其实是一个比较细节的问题,先看一段代码:

       

public void ProcessRequest(HttpContext context)        {            if (context.Request["type"] != null)            {                context.Response.ContentType = "text/plain";                context.Response.Buffer = true;                context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);                context.Response.AddHeader("pragma", "no-cache");                context.Response.AddHeader("cache-control", "");                context.Response.CacheControl = "no-cache";                string type = context.Request["type"].ToString();                switch (type)                {                    case "getsellerlist":                        GetSellerList(context);                        break;                    case "getsellerinfo":                        GetSellerInfo(context);                        break;                    case "getsellernormalinfo":                        GetSellerNormalInfo(context);                        break;                    case "getsellernormallist":                        GetSellerNormalList(context);                        break;                    case "getsellerpropertylist":                        GetSellerPropertyLity(context);                        break;                    case "getscopelist":                        GetScopeList(context);                        break;                    case "imgupload":                        ImgUpload(context);                        break;                    case "chefupload":                        ChefUpload(context);                        break;                    case "sellerupload":                        SellerUpload(context);                        break;                    case "storeupload":                        StoreUpload(context);                        break;                    case"LoadSellerDataByPartner":                        LoadSellerDataByPartner(context);                        break;                }            }        }

               上面这段代码是handler处理程序的入口,从这里根据type选择要执行哪个方法。但是一般,一个handler要处理的一个页面上的很多事件,我每加一个方法,就要去修改switch..case部分,这是很违反开放封闭原则的,理想情况下是这样,我每加一个方法,原来写好的程序段都是不可以被修改的,但是可以在原来的基础上增加。

        所以,我们这样:

            

#region 反射取出这里的switch_case的方法,但是要求传过来的type要跟方法名称完全一致                     System.Reflection.MethodInfo ChosedMethod = this.GetType().GetMethod(type);//利用反射根据传进来的值选取要被执行的方法                     if (ChosedMethod != null)                           {                                ChosedMethod.Invoke(this, new object[] { context });                           }                        }                #endregion

        我们在程序里面通过反射动态加载方法,超级方便哎~~~以后再也不用超长的switch...case了。

        小结:

                最近在新公司修bug的时候,看到那些像屎一样的代码感觉编写可读性强的代码是非常有必要的,代码应该写出来让别人看着像工艺品,不应该是满眼看去一坨一坨的。。。。

 

转载地址:http://zrlja.baihongyu.com/

你可能感兴趣的文章
.NET Core的依赖注入[1]: 控制反转
查看>>
hive 提取用户第一次浏览/购买 某商品的 时间
查看>>
[ARCH] 1、virtualbox中安装archlinux+i3桌面,并做简单美化
查看>>
MVVM模式下关闭窗口的实现
查看>>
程序员晋级CTO之路的8大准则
查看>>
linux curl 命令详解,以及实例
查看>>
CentOS7 下 keepalived 的安装和配置
查看>>
R绘图 第七篇:绘制条形图(ggplot2)
查看>>
Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer
查看>>
安装Cloudera manager Server步骤详解
查看>>
Windows 10原版ISO下载地址(持续更新)
查看>>
js 日期 相关
查看>>
爬取伯乐在线文章(一)
查看>>
thymeleaf使用详解
查看>>
.hashCode方法的作用
查看>>
高通平台启动log概述(PBL log、sbl1 log、kernel log)【转】
查看>>
高并发处理思路与手段(七):数据库切库(读写分离)、分库、分表
查看>>
python安装教程(Windows系统,python3.7为例)
查看>>
repo总结【转】
查看>>
Git强制拉取覆盖本地
查看>>