1

我正在实现一个接收不同请求的 SOAP-Webservice。我的 Manager 类是否应该在将 Request 对象委托给实现类之前将其转换为内部表示?

我认为这将是一个关于解耦的好主意。但是这样做我必须创建每个 RequestObject 类的副本并将其命名为 InternalRequestObject,它存储与原始请求相同的数据。

这有意义吗?

4

1 回答 1

1

如果您打算重用那些我称之为业务层的实现类,这是有道理的。

在您当前的设置中,您将业务层公开为 Web 服务。如果您愿意的话,Web 服务的骨架是您的业务层的客户端。

现在出现的问题是:您的业务层是否应该关心它将拥有什么样的客户?业务层的数据契约应该由客户端来决定,还是客户端应该尊重业务层暴露的数据契约?

明显的反应是客户端应该尊重业务层的数据契约,所以你的问题的答案是:的,你应该将 SOAP 请求映射到实现类使用的内部请求类型,以获得更好的解耦两者之间。

只有一种情况我会考虑直接将请求类型一直使用到我的业务层:如果我绝对 (101%) 确定我将永远不必将我的业务层公开为 SOAP 以外的任何东西网络服务。

这个想法是你只有两个主要选择:

1. 到处保持相同的请求类型。这样做的缺点是,如果在某些时候您必须添加其他(非 SOAP)客户端,您将遭受大量重写业务层的麻烦。

或者

2. 将 SOAP 请求类型映射到内部类型。这样做的缺点是您冒着重复代码和额外工作的风险,最终发现一切都是徒劳的,毕竟您不需要添加其他客户端。

考虑您的情况并谨慎选择!但我必须告诉你,就我个人而言,到目前为止,我还没有遇到过 2 号的劣势。我总是最终将新客户添加到该事物中,那时它有助于从一开始就映射类型。

于 2011-05-31T21:00:45.813 回答