首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOA、请求/响应服务层、接受和返回请求/响应还是数组或请求/响应?

SOA、请求/响应服务层、接受和返回请求/响应还是数组或请求/响应?
EN

Stack Overflow用户
提问于 2011-06-04 18:16:36
回答 7查看 1.7K关注 0票数 8

我们正在使用WCF实现一个Request/Response Service Layer,其中每个请求都从一个基本请求类继承,每个响应都从基本响应类继承。

该服务有一个处理方法,它接受一个请求并返回一个响应。

代码语言:javascript
复制
// Messages contract
public abstract class Request {}
public abstract class Response {}

// Operation contract
Response Process(Request request);

然而,我们团队的某些成员认为,操作契约应该接受并返回一组请求/响应,而不是期望和返回单个请求/响应。

代码语言:javascript
复制
// Operation contract
Response[] Process(Request[] requests);

就我个人而言,我不认为它在语义上是正确的,如果需要立即处理相关请求的集合(可能是批处理的),我会考虑引入BatchRequest和BatchResponse消息。

代码语言:javascript
复制
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;}
}

在我看来,接受和返回一个数组似乎并不正确,这肯定是我在任何地方都没有见过的模式。这是不是还有什么问题呢?如果是,是什么?

有些人认为,接受/返回数组可以让我们避免引入批处理请求的额外复杂性(如上图所示),而且无论如何都可以在数组中发送单个请求。

谢谢

EN

回答 7

Stack Overflow用户

发布于 2011-06-13 15:49:02

首先,数组增加了不必要的复杂性。保持简单(和)愚蠢。

例如。应该如何处理错误?如果请求#1失败,那么请求#2和#3是否应该被执行?应该如何报告错误?

您的同事希望通过创建所有请求数组来解决哪些问题?如果是性能方面的问题,那就像是过早的优化。还有其他几种方法可以提高性能,但在真正必要之前不要做任何事情。

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

票数 14
EN

Stack Overflow用户

发布于 2011-06-04 18:23:46

我更喜欢单个请求和响应,并使用命令模式来批量处理要完成的多个操作。

我发现SOA已经足够复杂了,而且还没有看到意外的模式出现。如果部分请求失败,会发生什么情况?是全部回滚,还是只回滚失败的请求。啊哈,我的头开始疼了。

票数 8
EN

Stack Overflow用户

发布于 2011-06-13 21:55:32

国际海事组织,您设计/建模这些服务的决定应该完全基于其使用场景。

在SOA建模期间-目标应该是构建松散耦合的系统/服务-支持相关的业务域(应用程序)。

理想情况下--您的服务不应该太细粒度,也不应该太复合。它的重用也同样重要。正因为如此,你需要考虑客户的需求。

下面是一些场景,在这些场景中,任何一个都可能是有用的

  1. 信息即服务

通过公共服务访问数据(主数据)。-在这种情况下,以批处理模式访问主数据确实没有意义。

  • 更新组数据-将用户迁移到新销售计划的服务?(!)

而且,我不认为用数组处理错误场景是一个问题-你真的不能概括这个问题-它是非常上下文的。这是一个设计决定。

就像上面的案例2一样--你可以在Response[]中处理所有的东西并返回错误代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6236136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档