我的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个类。
答案 0 :(得分:0)
使用基于REST的CRUD界面的好方法。 SOA接口应该更加专业化。
答案 1 :(得分:0)
我想这些是开发SOA应用程序的一些指导原则。基础是维护业务单独的对象,这些对象代表业务与服务公开的合同中的对象。
请参阅SOA模式Standardized Service Contract和Concurrent 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);
来获取列表。从此结果中,您可以将内部服务响应映射到这些对象。