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

    我们 RCV 在这里,经常跑concurrent request RTP: Receiving Transaction Processor, 它主要是用来处理 RCV_TRANSACTIONS_INT ...

  2. Access Toke调用受保护的API

    ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API 在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端 ...

  3. ASP.NET MVC上传文件----uploadify的使用

    课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件.由于时间的关系,故采用第三方插件:uploadify. upl ...

  4. hibernate tools连接数据报错

    报如下的错误: An internal error occurred during: "Fetching children of Database". org.slf4j.spi. ...

  5. F4107Usart数据处理程序

    解决:Cortex-M4上,usart自己主动发送数据计划. 1. usart快速突破.数据还没有被处理.usart中断会把盖掉的数据不被处理. 数据丢失. 2.此过程需要main处理4一个usart ...

  6. JDBC连接池的简单实现

    首先解释一下,我在做自己android发育.java web这是我的弱点,就在最近,京东云免费,因此,要折腾几.有一点经验,特别是作为共享. 假设内容的文章是错,还请高手指正. 我在这里web结束,需 ...

  7. 《全体育&#183;瑜伽》

    今天出去吃饭,本来是想买<印象>创刊号的,结果没找着,看到一本<瑜伽>创刊号.作为一个伪瑜伽爱好者,我掏了20元大洋买了一本,你知道如今的时尚杂志都非常坏,用塑料膜封着,不能翻 ...

  8. 日积月累系列之省市选择器(js源码)

    省市选择器是大家经常用到的, 但网上找的省市选择器都不是很实用,于是自己写了移动端的省市选择器. 界面: 源码结构: 演示地址:http://component.cform.cn/city/ 演示二维 ...

  9. javascript7

    语句:条件,循环,跳转, 表达式语句,复合语句和空语句,声明语句,var,function,条件语句,switch,循环,标签语句,break语句,continue语句,return语句,throw语 ...

  10. 【硬件】DELLserver硬件监控和DELL系统管理工具OMSA介绍

    1.1.1. DELLserver硬件监控和DELL系统管理工具OMSA介绍 本文介绍了利用使用Nagios和OMSA显示器DELLserver硬件健康状况,Nagios监控的方式是NRPE模式,须要 ...