使用Dictionary替换IF和switch语言实现高效的Action分流
说到Action,对于每一个开发者来说都不是一个陌生的东西。
我们每一次前端与后台之前的沟通,或者是访问一次接口都需要有一个Action,Action的作用就是告诉服务端你要执行什么操作。
比如我们在删除一行时会用到action=deleteone
添加一行时会用到addone等方法
今天我们使用Dictionary来实现这种多Action的选择问题
通常我们会用IF或者是switch语句来实现
下面一起来看一下Dictionary是怎么实现的
[C#] 纯文本查看 复制代码 // 摘要:
// 表示键和值的集合。
//
// 类型参数:
// TKey:
// 字典中的键的类型。
//
// TValue:
// 字典中的值的类型。
上面是关于Dictionary类的说明,很简单就是一个Key ,Value的静态集合。
我们来新建一个handerTest.ashx的一般处理程序
在类的最上面定义一个委托和我们需要的集合
[C#] 纯文本查看 复制代码 delegate void myFunc(HttpContext context);
static Dictionary<string, myFunc> dict = new Dictionary<string, myFunc>();
定义myFunc关于HttpContext 的委托仅仅是为了书写方法,大家也可以不去定义,直接使用也是可以的。
HanderTest的构造方法里添加我们所有需要的项目
[C#] 纯文本查看 复制代码 static handerTest()
{
dict.Add("del", context =>
{
string jsonback = context.Request.Params["jsoncallback"];
string id = context.Request["id"];
//输出
});
dict.Add("mgdel", context =>
{
string jsonback = context.Request.Params["jsoncallback"];
string id = context.Request["id"];
//输出
});
dict.Add("address", context =>
{
string jsonback = context.Request["jsoncallback"];
string proid = context.Request["proid"];
//输出
});
dict.Add("logout", context => {
context.Response.Redirect("/Login");
context.Response.ContentType = "text/plain";
context.Response.Write("1;");
});
dict.Add("getUserName", context => {
string userName = string.Empty;
string userid = LoginUser.GetLoginUserID();
context.Response.Write(userName);
});
}
然呢
ProcessRequest方法书写如下,
[C#] 纯文本查看 复制代码 public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string act = context.Request["action"];
if (!string.IsNullOrWhiteSpace(act))
{
if (dict.ContainsKey(act))
{
dict[act](context);
}
}
}
这样程序就会自动找到相应的方法去执行。
很简单的一种解决方案
[C#] 纯文本查看 复制代码 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DistributedBLL.User;
using DistributedDict;
using System.Text;
using DistributedBLL;
using DistributedBLL.Mongodb.User;
namespace DistributedWeb.Hander
{
/// <summary>
/// hander 的摘要说明
/// </summary>
public class handerTest : IHttpHandler
{
delegate void myFunc(HttpContext context);
static Dictionary<string, myFunc> dict = new Dictionary<string, myFunc>();
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string act = context.Request["action"];
if (!string.IsNullOrWhiteSpace(act))
{
if (dict.ContainsKey(act))
{
dict[act](context);
}
}
}
static handerTest()
{
dict.Add("del", context =>
{
string jsonback = context.Request.Params["jsoncallback"];
string id = context.Request["id"];
//输出
});
dict.Add("mgdel", context =>
{
string jsonback = context.Request.Params["jsoncallback"];
string id = context.Request["id"];
//输出
});
dict.Add("address", context =>
{
string jsonback = context.Request["jsoncallback"];
string proid = context.Request["proid"];
//输出
});
dict.Add("logout", context => {
context.Response.Redirect("/Login");
context.Response.ContentType = "text/plain";
context.Response.Write("1;");
});
dict.Add("getUserName", context => {
string userName = string.Empty;
string userid = LoginUser.GetLoginUserID();
context.Response.Write(userName);
});
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
以上是全部代码,可以直接复制使用
这是我的分布式框架http://fenbu.sufeinet.com/中用到的一些小技巧
希望对大家有帮助
|