SOA中的数据传输类

时间:2011-04-14 15:54:01

标签: c# soa

我的WebApplication调用WebService方法对数据库执行CRUD操作。

WebService中的所有方法,将输入作为请求类获取,并将输出作为响应类返回。 e.g:

如果我想从Customer表中获取Customer,那么在WebService中使用的方法是:

CustomerResponse GetCustomer(CustomerRequest request)

CustomerRequest包含属性,例如ID;然后将用于通过DB从该ID获取客户。

CustomerResponse包含我想传递给WebApplication的所有属性,例如ID,Name,Address

到目前为止,那么好......

如果我想获得所有客户,我必须为此创建2个额外的类,一个如下:CustomersRequest和第二个CustomersResponse。所以我总共有4个数据传输类:

CustomerRequest CustomerResponse CustomersRequest CustomersResponse

其中CustomersResponse具有包含所有CustomerResponse对象的属性List。

这是一个好的方法,还是应该在2个类中完成,无论我们想要一个特定类的集合还是单个对象?

因为如果我继续这样做,db中的每个表都至少会有4个类。

2 个答案:

答案 0 :(得分:0)

使用基于REST的CRUD界面的好方法。 SOA接口应该更加专业化。

答案 1 :(得分:0)

我想这些是开发SOA应用程序的一些指导原则。基础是维护业务单独的对象,这些对象代表业务与服务公开的合同中的对象。

请参阅SOA模式Standardized Service ContractConcurrent Contracts

修改
正确答案是“取决于您希望披露的合同”。

我相信你还应该定义两个:

<xs:complexType name="CustomersResponse">
    <xs:sequence>
        <xs:element name="Customer" minOccurs="1" maxOccurs="unbounded" />
        <!-- other fields -->
    </xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerResponse">
    <xs:sequence>
        <xs:element name="Customer" minOccurs="1" maxOccurs="1" />
        <!-- other fields -->
    </xs:sequence>
</xs:complexType>
在内部,您可以维护单个实现List<Customer>getCustomers(query);来获取列表。从此结果中,您可以将内部服务响应映射到这些对象。