SOA中的数据传输类

本文关键字:数据传输 SOA | 更新日期: 2023-09-27 17:50:17

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

WebService中的所有方法,以请求类的形式获取输入,并以响应类的形式返回输出。例句:

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

CustomerResponse GetCustomer(CustomerRequest request)

CustomerRequest包含属性,例如ID;然后将使用该ID从数据库获取客户。

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

So Far, So Good…

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

CustomerRequestCustomerResponseCustomersRequestCustomersResponse

其中CustomerResponse有一个包含所有CustomerResponse对象的属性List。

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

,因为如果我继续这样做,数据库中的每个表将至少有4个类。

SOA中的数据传输类

使用基于rest的CRUD接口的好方法。SOA接口应该更加专门化。

我想这些是开发SOA应用程序的一些指导方针。其基础是维护您的业务分离对象(表示业务)与服务公开的契约中的对象。

参考SOA模式标准化服务契约和并发契约

编辑
正确的答案是"取决于您希望公开的合同"。

我认为你仍然应该定义两个:

<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);。根据这个结果,您可以将内部服务响应映射到这些对象。