SOA,请求/响应服务层,接受并返回请求/响应与数组或请求/响应?

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是否仍然执行?如何报告错误?

您的同事希望通过制作所有请求数组来解决哪些问题?如果它的性能,它闻起来像过早的优化.还有其他几种方法可以提高性能,但在真正需要之前不要做任何事情.

如果要释放客户端而不是等待结果,请切换到异步客户端.


Pet*_*ans 8

我更喜欢单个请求和响应,并使用命令模式批处理要执行的多个操作.

我发现SOA很复杂,没有出现意想不到的模式.如果部分请求失败,它们全部回滚,还是仅失败的请求会发生什么?Aaarghhh,我的头开始疼.