`
zhmocean
  • 浏览: 202564 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

适配器模式在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 AsDataTable...get; }

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

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

相关推荐

    cxf_axis_xfire客户端调用的几种方法[收集].pdf

    这些方法中,`getMap()`和`getUser()`接收和返回Map类型的数据,而Web服务通常不直接支持Map作为参数或返回值。因此,我们需要创建一个XML与Java类型的适配器,以便进行数据转换。 `StringStringMapAdapter`就是...

    超级有影响力霸气的Java面试题大全文档

    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。  对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器...

    Struts学习笔记

    Struts是Java Web开发中的一个MVC框架,全名是Apache Struts,它遵循Model-View-Controller设计模式,主要用于创建动态、数据驱动的Web应用。在Struts框架中,控制器由Struts提供的Servlet(如ActionServlet)来扮演...

    SpringMVC笔记1

    【MVC模式在B/S系统中的应用】 在B/S(Browser/Server)系统中,MVC模式主要由三部分组成: 1. **Model(模型)**:负责封装应用状态和数据,处理业务逻辑和数据的增删改查,对外提供公共接口供其他组件调用。 2....

    Maven+springMVC+JSON实例

    2. **配置SpringMVC**:在`src/main/webapp/WEB-INF`目录下创建`servlet-context.xml`,配置SpringMVC的DispatcherServlet,包括视图解析器、视图技术(如JSP或Thymeleaf)、以及各种处理器映射器和适配器。...

    springmvc第一天课堂笔记.docx

    **SpringMVC**是Spring框架中的一个重要组成部分,主要用于Web应用程序的开发。它遵循MVC(Model-View-Controller)设计模式,帮助开发者构建清晰、可维护的Web应用。与Spring其他部分无缝集成,无需额外的中间层...

    SpringMVCDemo

    5. **Service 和 Dao**:在实际项目中,业务逻辑通常被封装在 Service 层,而数据访问操作则由 Dao(Data Access Object)层处理。Spring 提供了依赖注入(DI)和面向切面编程(AOP)来简化这些层的管理。 6. **...

    XFire发布WebService方法如果返回的是LIST的处理

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间交换数据。XFire是一个早期的开源Java Web服务框架,它提供了强大的功能来创建、部署和管理Web服务。这篇博客“XFire发布WebService方法如果...

    SpringMVC 基础知识

    在`WEB-INF/web.xml`中配置DispatcherServlet作为前端控制器。 **SpringMVC处理流程** 1. 用户发送HTTP请求到DispatcherServlet。 2. DispatcherServlet通过HandlerMapping找到对应的Handler。 3. HandlerAdapter...

    SpringMVC面试题 29道1

    Spring MVC中常见的注解有`@RequestMapping`用于映射HTTP请求,`@Controller`定义控制器,`@Service`标记服务层组件,`@Autowired`自动装配依赖,`@ResponseBody`将方法返回值直接写入HTTP响应体等。注解本质上是元...

    jaxws-api-2.1_jaxb-api-2.1.jar

    【标题与描述解析】 标题"jaxws-api-2.1_jaxb-api-2.1.jar"中的"jaxws-api-2.1"指的是Java API for ...在实际项目中,它们通常是Java EE应用服务器的标准组成部分,用于构建高效、可扩展且易于维护的Web服务解决方案。

    中科院计算所Android开发技术培训大纲.doc

    - 播送消息:理解Android中的BroadcastReceiver及其在组件间通信中的应用。 6. **后台服务(Service)** - Service基础:学习Service的创建、启动和管理,以及如何在后台运行任务。 - 进程间通信:介绍Service...

    springMVC入门实例

    在实践中,你可以创建一个简单的 CRUD(创建、读取、更新、删除)应用,来更好地理解这些概念。hestia 这个文件可能是项目工程或者示例代码,通过阅读和运行它,你可以进一步掌握 Spring MVC 的实际应用。

    Servlet项目集成zipkin

    当我们谈论"Servlet项目集成zipkin"时,意味着我们要在不依赖Spring框架的情况下,将Zipkin的追踪功能引入到Servlet应用中。 **1. Zipkin的基本概念** Zipkin的设计灵感来源于Google的Dapper,它提供了收集和可视...

    java 面试题 总结

    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上...

    AppCan MAS开发人员参考V2.pdf

    - **运行环境**:适配器基于JavaScript编写,可以在任何支持JavaScript的环境中运行。 - **关键对象**: - **Param对象**:用于处理请求参数。 - **Robot对象**:提供了与外部系统交互的方法,如调用Web服务、...

    springmvc完整实例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了全面的MVC(Model-View-Controller)支持。本实例旨在帮助初学者快速理解并上手Spring MVC,通过提供的完整jar包和配置文件,你可以...

    SpringMVC学习课堂笔记

    5. **Controller层调用**:在Controller中注入Service层对象,实现业务逻辑。 #### 四、SpringMVC注解开发 ##### 4.1 常用注解 - `@RequestMapping`:用于映射URL路径。 - `@RequestParam`:用于获取请求参数。 -...

    geotools-23.0-doc.zip

    5. **WMS 和 WFS 客户端**:GeoTools 可以作为 Web Map Service (WMS) 和 Web Feature Service (WFS) 的客户端,从远程服务器获取地图图像和地理空间数据。 6. **样式(Styles)**:GeoTools 支持 SLD(Styled ...

    看透springMvc源代码分析与实践

    在这个过程中,开发者需要定义控制器类(Controller),并在其中使用@RequestMapping注解来映射HTTP请求,同时还需要编写Service层和DAO层来处理业务逻辑和数据库操作。 ### 五、总结 通过对Spring MVC源代码的深入...

Global site tag (gtag.js) - Google Analytics