适配器模式在Web Service返回值中的应用

        很多时候,Web Service程序以应用在SOA系统中的无连接状态形式存在,即,服务端对客户端请求的数据都是即时返回,不会为客户端保留即时数据,而由于跨平台的特性,不同语言间可以无缝兼容的只有基本数据类型,因此,对于其它一些复杂数据,我的系统采用了XML格式的定义方式。
对于返回的数据无外乎以下三种模式:
1、 基本类型
2、 键-值(-类型)列表类型
3、 二维表类型
对于后两种类型,我使用了TReturnManager和TXmlReturn类来进行处理,具体说明请见:http://blog.csdn.net/zhmnsw/archive/2006/10/27/1353418.aspx(Web Service接口数据交换标准--返回值)。
之前,TReturnManager处理了TStrList(自定义的键-值-类型列表类型)、DataTable类型和Exception、TSvrException(自定义异常,附加异常编码和信息以及DataTable类型额外数据),对于这些类型的封装都是在类内部进行。
但随着开发使用的数据类型逐渐增多,TReturnManager类越来越臃肿,尤其是使用到NHibernate(以下简称NH)时,由于NH只能返回IList类型,因此TReturnManager类又需要增加与之相应的处理函数,导致该类扩充越来越困难,加之每次都需要修改TReturnManager单元,给代码维护带来不必要的麻烦。
为了解决这个问题,我们可以使用一个适配器模式,定义以下接口:
 

using System;
using System.Collections;
using System.Data;

namespace QihangSoft.Communication
{

    
/// <summary>
    
/// IDataListAdapter ,返回值数据适配器接口
    
/// </summary>

    public interface IDataListAdapter {

        
//列列表
        DataColumnCollection ColumnList {get; }

        
//记录列表
        DataRowCollection RecordList {get; }

        
//作为DataTable返回
        DataTable AsDataTableget; }

        
//数据标识名称
        string ListName get; }
    }

}
IDataListAdapter接口只有4个属性,分别返回二维表、行、列以及数据标识名称,之后为每一种数据类型定义一种继承自该接口的适配器,这样在处理的时候,只处理IDataListAdapter接口即可。于是TReturnManager类的处理函数只剩下两个:处理IDataListAdapter接口的和处理的IException接口(该适配接口实现同前一个,在此不赘述)。
以下为相应的类图(该图没有显示IException接口相关类型):
该类图中有三个适配器,分别是:
Ÿ           组合了DataTable的TDlaDataTable。
Ÿ           组合了TStrList的TDlaStrList(TStrList可以转换成单行记录的DataTable)
Ÿ           组合了IList的TDlaEntityList(目前为NH返回值,该适配器使用了反射机制将数据转换成DataTable型,但仍需扩展。NH数据与DataTable间的转换效率将在其它地方阐述)。
由于IDataListAdapter接口的存在,每次数据类型解析的更动,都只需增加或修改相应类型的适配器即可,无需更动TReturnManager单元。

 

标签:
文章分类 FK Coding

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

点赞
如果您觉得很赞,我将非常乐意接受虚拟币的捐赠,以示您对我的肯定。

比特币钱包地址:
1PqpqA8FyH3NbfCrbcRd1YxQk3LEsSEYDV
莱特币钱包地址:
LRTdmovGGVEHCKWz7JdL9aiB7VZkuNycJf
站点勋章
网站统计