我们经常把一个项目分层去开发,无论是通过三层来面向对象开发还是用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来锻炼一下自己,争取今年达到自己的目标。
 
 

设计适用于SOA的类型的更多相关文章

  1. 设计适用于SOA的类型(二)

    接着上次的,以扩展String类型为例,继续根据自己的使用习惯闭门造车!   这一次我重载了运算符 = 和 + ,我觉得这样更方便我的使用.首先先贴代码: /// <summary> // ...

  2. IDDD 实现领域驱动设计-SOA、REST 和六边形架构

    上一篇:<IDDD 实现领域驱动设计-架构之经典分层> 阅读目录: SOA-面向服务架构 REST 与 RESTful 资源(Resources) 状态(State) 六边形架构 DDD ...

  3. 结合领域驱动设计的SOA分布式软件架构

    引言 本文主要是参考Martion Fowler所著的<企业应用架构模式>与Eric Evans所著的<领域驱动设计>这两本泰山之作,加上本人在近年实际的工作过程中开发SOA系 ...

  4. 网页设计实战3 ufo类型的科技网页如何实现

    网页设计实战3 ufo类型的科技网页如何实现 一.总结 一句话总结:基础的图片素材就是如何几张图片,这个效果只是通过jquery或者js让那个png图片旋转起来了,如此而已.其实核心就是一个trans ...

  5. WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口

    原文:WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口 当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口.但是,如果直接判断是否是 W ...

  6. 给公司部门设计的SOA架构

    新来老大年前开会说各位同学,公司业务越来越重,未来几年要成倍增长......,要梳理出一套新架构,才能更好的支持N万用户.....,以后升职加薪当上....打败..... 想想还有点小激动呢,于是过年 ...

  7. 设计的SOA架构

    新来老大年前开会说各位同学,公司业务越来越重,未来几年要成倍增长......,要梳理出一套新架构,才能更好的支持N万用户.....,以后升职加薪当上....打败..... 想想还有点小激动呢,于是过年 ...

  8. 给公司部门设计的SOA架构(转)

    新来老大年前开会说:各位同学,公司业务越来越重,未来几年要成倍增长......,我们要梳理出一套新架构,才能更好的支持N万用户.....,以后升职加薪当上....打败..... 想想还有点小激动呢,于 ...

  9. 互联网产品设计常用文档类型-BRD、MRD、PRD、FSD (

    BRD Business Requirements Document,商业需求文档.这是产品声明周期中最早的问的文档,再早就应该是脑中的构思了,其内容涉及市场分析,销售策略,盈利预测等,通常是和老大们 ...

随机推荐

  1. MySQL进口.sql文件和常用命令

    MySQL进口.sql文件和常用命令 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次运行多条sql命令的.在mysql中运行sql文件的命令: mysql> so ...

  2. javascript利用map,every,filter,some,reduce,sort对数组进行最优化处理

    案例: var scoresTable=[ {id:11,name:"小张",score:80}, {id:22,name:"小王",score:95}, {i ...

  3. 使用Visual Studio创建映像向导(Image Sprite)——Web Essential

    原版的:Creating Image Sprite in Visual Studio - Web Essential 译者注:有关图片精灵的信息请參阅http://baike.baidu.com/vi ...

  4. VS2012使用XListCtrl

    XListCtrl.强大ListCtrl.到现在,所有我曾经遇到过ListCtrl我们使用XListCtrl攻克. XListCtrl有什么可以支持? 变化column背景颜色.尺寸.线.制作chec ...

  5. [ 单例、代理 & 通知 ]

    PS:手写单例.代理方法实现 & 通知的简单使用! [ 单例模式,代理设计模式,观察者模式! ] 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设 ...

  6. CSDN博客频道维护公告

    各位亲爱的用户:        为了给大家提供更稳定的使用环境,2014年4月23日23点至04月24日1点(本周四凌晨)博客频道server将进行维护,维护期间不能正常訪问.给大家带来不便,敬请广大 ...

  7. jQuery 文件碎片

    经JS操作DOM节点可以是节点的单位,让我们连接节点,能够createElement,createTextNode,然后,appendChild定在一起,然后再用appendChild或insertB ...

  8. Zepto

    移动开发流量省起来之Zepto 事情是这样的:最近开发的一个手机网站客户反应访问起来特别慢,刷了半天才能看到页面,然后问我们是不是网站出问题了.于是我赶紧找了各种手机测试一下,没有问题,首先排除程序错 ...

  9. Web API-路由(一)

    这一篇文章描述了ASP.NET API如何将HTTP请求路由到控制器. 如果你熟悉ASP.NET MVC,Web API路由和MVC路由非常相似,主要的不同地方是Web API使用HTTP方法,而不是 ...

  10. Installshield建立IE快捷方式的方法

    原文:Installshield建立IE快捷方式的方法 实现方法:在project assistant里或者install design里随便建一个快捷方式,然后去install design里修改刚 ...