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