优化AJAX提交到Handler的ProcessRequest方法


背景:


               上周搬到新组开发一个微信端的项目,发现这里前台页面部分都是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部分,这是很违反开放封闭原则的,理想情况下是这样,我没加一个方法,这里是不可以被修改的,但是可以在原来的基础上增加。



        所以,我们这样:


                  

          System.Reflection.MethodInfo method = this.GetType().GetMethod(context.Request["type"]);


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




        小结:


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









 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。