今天研究了一下微软发布的SOA Hands On Lab: Web Service Software Factory.此组件是微软提供的一个SOA开发辅助包,方便那些使用.NET创建SOA应用的开发者应用最佳实践。
[@more@]当直接使用微软提供的ASMX模板创建项目时,项目的目录结构如图:
业务组件
在Business Logic项目文件夹中,有两个项目:
BusinessEntities:业务实体,代表着数据库表的对象表达。微软提供了对于SQL Server数据库的自动实体生成支持,对Oracle数据库并不支持。
业务实体是基础类——数据库表的对象化。它不依赖任何项目。
BusinessLogic:这里的类调用数据访问层(DataAccess)的方法,对业务实体进行操作,即调用了真正的CRUD方法,操作了数据。
因此,它引用了业务实体和数据访问层2个项目:业务实体和数据访问层。
综合来讲,Business Logic项目文件夹命名为“Business Component”更为合理。
数据访问层
Resource Access文件夹中,包含数据访问层。微软默认的支持对SQL Server的CRUD SP的自动创建,并能够自动的生成资料库类,完成业务实体与资料库中SP之间的映射。
因此,数据访问层项目引用了业务实体项目。
服务接口
Service Interface项目文件夹中定义的是Web Service层的项目。
l DataTypes项目
首先是DataTypes项目,此项目定义了Web Service方法中传递的对象的定义,实际上,大多是业务实体的简单XML序列化表达。这些数据类型定义,可以手工创建,也可以从XSD自动生成,这对使用Rose,PowerDesigner一类的设计工具的项目来说,是个很实用的功能。
数据类型项目是个基础项目,它不依赖任何其他项目。
l 服务契约项目
服务契约项目定义了一系列抽象接口。它依赖于DataTypes项目。一般的,先使用向导创建Message Types,Message Types是用在接口签名中的请求与响应。由于它们也是在Web Service的方法中使用的参数,故也是XML序列化的。当你调用该方法是,必需知道该方法相关的参数的定义,因此,把消息类型和方法签名放在一个项目中定义,是合理的。
实际上,Message Types是根据方法的需要,对DataTypes类的组合。
l 服务实现项目
服务实现项目是对服务契约的实现。对于服务而言,实际就是,把来自客户端的数据,转换成数据访问层可识别的数据对象,然后调用逻辑层方法,实现功能。
因此它依赖于以上所有项目——除了数据访问层项目,显然,数据访问层应该隐藏在逻辑层之后。
对于其实现的契约方法,服务实现必须编写一个对应的从DataTypes对象转换到业务实体对象的一个映射方法。这个方法是静态的,这的确是个枯燥的事情,幸好微软给我们提供了向导,自动生成相关代码,防止出错。
服务契约转换届面:
l Web 项目
服务器端的最后一个项目是Web Host项目,它用于Expose Web Service。
未完待续…….
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7176288/viewspace-904033/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7176288/viewspace-904033/