我们经常把一个项目分层去开发,无论是通过三层来面向对象开发还是用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. java字节中的基本类型的职业的数目 (采访总是问)

    因为移动装置存储器中的移动开发的局限性,数据的字节数需要考虑往往在占领中使用的类型. 下面介绍下一个Java,以加深记忆. 在Java中一共同拥有8种基本数据类型,当中有4种整型,2种浮点类型,1种用 ...

  2. 学习javascript 的一点感想

    原文:学习javascript 的一点感想 //动态性是指,在一个Javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可,如下例:var obj=ne ...

  3. js中,(function(){})()的用法解析

    (function($){...})(jQuery)  含义 经常用,今天总结一下,下文摘自某网友的总结: (function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下 ...

  4. C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...

  5. Web字体@font-face对于中文字体的使用

    今天算是刚开始玩博客园..感觉很新鲜在首页 上看到了一个博客http://www.cnblogs.com/liuminghai/p/4238256.html是关于web文字的,挺不错 但是B/S的前端 ...

  6. MSSQL发现第五到数据的第十

    第二十数据查询数据库,第十条数据,两起案件: 1,ID是连接的,当然这样的情况比較好查.直接SELECT就能够了.取ID大于5小于10就能够了, 这样的情况比較少. 2.ID不是连接的.假设要取第五条 ...

  7. .net EF 事物 订单流水号的生成 (一)

    首先需要 添加 System.Transactions 程序集 数据表: create table SalesOrder ( ID ,) primary key not null, OrderNo ) ...

  8. MEF框架在Silverlight中应用(15)

    原文:MEF框架在Silverlight中应用(15) MEF框架在Silverlight中应用 代码下载 MEF框架是微软提供的一个插件框架.应用概括为一句话:输入,输出,组合.下面是具体在Silv ...

  9. 多线程编程 (2) -NSOperation

    一.NSInvocationOperation 二.NSBlockOperation 三.NSOperation的其他用法 四.自定义NSOperation 1.上一讲简单介绍了NSThread的使用 ...

  10. php中soap应用

    原文:php中soap应用 SOAP:简单对象访问协议 (SOAP:Simple Object Access Protocol) 简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议 ...