设计适用于SOA的类型

我们经常把一个项目分层去开发,无论是通过三层来面向对象开发还是用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

错误信息和序列化,都是放在基类里面的,所以这里我只需要定义一个返回值。

因为经常拼接字符串,所以就在构造函数里面添加了可变参数,这样在实例化的时候就方便了一些。

 

下面我来用一下这货:
实例化:
 
使用错误信息:
  设计适用于SOA的类型
 
序列化:
 
 

反序列化:
 
 
我想把这个程序集一直扩展下去,但能力有限,求各位大神协助我完善,帮助我学习,谢谢了。
Git:http://git.oschina.net/wangjunjie/WLF.git
 
之前还想过跳槽去上海闯闯,现在想想自己还没什么能拿的出的东西,索性写这个WLF来锻炼一下自己,争取今年达到自己的目标。
 
 

你可能感兴趣的:(SOA)