代码改变世界

利用虚拟方法和反射简化Alisoft API的调用(二)

2008-11-21 12:18  午夜瞎想  阅读(293)  评论(1编辑  收藏  举报

上篇 利用虚拟方法和反射简化Alisoft API的调用 写的时候比较晚,而且第一次在博客园上发博客,忘记贴具体的实现了.

顺便说一下题外话,阿里的工作人员的态度还是非常不错的,我上篇文章提的用户体验问题,马上就收到他们的反馈.值得表扬.毕竟国内大多开放的api 都是为了炒作概念而已.

言归正传 先贴委托的代码

public delegate TData Actions<TData>(string result);

public static TData Result<TData>(ParBase par, Actions<TData> reslutAction)

{

string status = string.Empty;

string result = Signature.Post(Constants.SIP_API_URL, par.ToString(), out status);

if (string.IsNullOrEmpty(status))

{

return default(TData);

}

else if ("9999".Equals(status)) //以下部分还没有优化,昨晚时间已经比较晚了就没想了 ,

{ //需要把这里抽离出来,毕竟alisoft api目前还在不断改进

return reslutAction(result);

//return null;

}

else if ("1004".Equals(status))

{

System.Web.HttpContext.Current.Response.Redirect(result + Constants.SIP_Redirecturl);

return default(TData); ;

}

else

{

//Utils.Debug("itemcats_get: " + parent_cid + " : " + Signature.GetMessage(status));

return default(TData); ;

}

}

ParBase类是参数的基类,由于大部分的api参数都比较多,传参是个烦人的事情,利用我以前写的ASP.NET偷懒大法三 (利用Attribute特性简化多查询条件拼接sql语句的麻烦) 同样的思路来节省代码

具体就不贴代码了,贴个图吧. (问一下,在word里面怎么能让代码可以折叠?)

图(1)

[Par(IsNeed=true)] 属性是为了表示参数是否必须.只要是为了开发中提醒我参数是否赋值

重写了ToString方法 来实现传给api的参数+sip_sign 参数

 

希望有更好的方法,来让我们偷懒,有好的思路记得告诉我.俺抛砖引玉啦 O(∩_∩)O