我们经常把一个项目分层去开发,无论是通过三层来面向对象开发还是用WCF或Remoting等面向服务的方式开发,返回值只有一个,如果底层出错了我们一般写日志来记录这些错误,然后分析错误来解决问题,但用户无法知道是不是自己操作不当,因为错误内容无法返回到界面上提示,不知道各位是如何处理这个问题的。如果是面向对象的话,我们可以通过 throw Exception 在 UI 上捕捉到异常。但是如果是面向服务的话,就只会返回一个服务器内部错误,具体原因体现不出来,我们当然在方法中添加 ref ErrorCode和 ref ErrorMsg 达到返回错误信息的目的。
而且比如Remoting的话,并不能传输所以的对象,所以我们需要先序列化成XML或Json来传递。鉴于这类操作,我模仿京东商城的SDK,练习着写了一下新的类。
首先我先定义了一个基类 WObject
[Serializable] public class WObject { public WObject() { } /// <summary> /// 返回值 /// </summary> private object objRet; #region 错误信息 private String _ErrCode = ""; /// <summary> /// 错误码 /// </summary> public String ErrCode { get { return _ErrCode; } set { _ErrCode = value; } } private String _ErrMsg = ""; /// <summary> /// 错误信息 /// </summary> public String ErrMsg { get { return _ErrMsg; } set { _ErrMsg = value; } } /// <summary> /// 获取错误信息 /// </summary> public String GetFullMsg { get { return string.Format("{0}|{1}", ErrCode, ErrMsg); } } /// <summary> /// 响应结果是否错误 /// </summary> public bool IsError { get { return (!string.IsNullOrEmpty(this.ErrCode) || !string.IsNullOrEmpty(this.ErrMsg)); } } #endregion #region 序列化/反序列化 public string ToJson() { return JsonConvert.SerializeObject(this); } public static T FromJson<T>(string sJson) where T : WObject { return JsonConvert.DeserializeObject<T>(sJson); } #endregion }
WObject
这里序列化和反序列化,我用 Json.Net。
我们最常用的就String,所以现在我们先扩展一下他,当然WObject也可以直接使用。
接下来我们的WString 是继承了WObject的
public class WString : WObject { /// <summary> /// 默认构造函数 /// </summary> public WString() { } public WString(params string[] strs) { sRet = string.Concat(strs); } public WString(params object[] strs) { sRet = string.Concat(strs); } /// <summary> /// 返回值 /// </summary> public string sRet = ""; }
WString
错误信息和序列化,都是放在基类里面的,所以这里我只需要定义一个返回值。
因为经常拼接字符串,所以就在构造函数里面添加了可变参数,这样在实例化的时候就方便了一些。
下面我来用一下这货:
实例化:
使用错误信息:
序列化:
反序列化:
我想把这个程序集一直扩展下去,但能力有限,求各位大神协助我完善,帮助我学习,谢谢了。
Git:http://git.oschina.net/wangjunjie/WLF.git
之前还想过跳槽去上海闯闯,现在想想自己还没什么能拿的出的东西,索性写这个WLF来锻炼一下自己,争取今年达到自己的目标。