Sha*_*bie 8 architecture wcf soa web-services
我们正在使用WCF 实现请求/响应服务层,其中每个请求都从基本Request类继承,并且每个响应都从基本Response类继承.
该服务具有单个Process方法,该方法接受Request并返回Response.
// Messages contract
public abstract class Request {}
public abstract class Response {}
// Operation contract
Response Process(Request request);
Run Code Online (Sandbox Code Playgroud)
但是,我们团队的某些成员认为,不是操作合同期望并返回单个请求/响应,而是应该接受并返回一组请求/响应.
// Operation contract
Response[] Process(Request[] requests);
Run Code Online (Sandbox Code Playgroud)
就个人而言,我没有发现它在语义上是正确的,并且在需要一次处理相关请求的集合(可能是批处理)的情况下,会考虑引入BatchRequest和BatchResponse消息.
public class BatchRequest : Request
{
public Request[] Requests {get;set;}
}
public class BatchResponses : Response
{
public string BatchReference {get; set;} // for example
public Response[] Responses {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
对我来说接受并返回一个数组似乎并不正确,这肯定是我在任何地方都没有看到的模式.这有什么不对吗?如果是,那是什么?
有些人认为接受/返回数组会让我们没有引入批处理请求的额外复杂性(如上图所示),并且无论如何都可以在数组中发送单个请求.
谢谢
jga*_*fin 14
首先,数组增加了不必要的复杂性.保持简单(和)愚蠢.
例如.如何处理错误?如果请求#1失败,请问#2和#3是否仍然执行?如何报告错误?
您的同事希望通过制作所有请求数组来解决哪些问题?如果它的性能,它闻起来像过早的优化.还有其他几种方法可以提高性能,但在真正需要之前不要做任何事情.
如果要释放客户端而不是等待结果,请切换到异步客户端.
我更喜欢单个请求和响应,并使用命令模式批处理要执行的多个操作.
我发现SOA很复杂,没有出现意想不到的模式.如果部分请求失败,它们全部回滚,还是仅失败的请求会发生什么?Aaarghhh,我的头开始疼.
| 归档时间: |
|
| 查看次数: |
1475 次 |
| 最近记录: |