2011-05-31 32 views
1

我正在实现接收不同请求的SOAP-Webservice。在将这些Request对象委托给实现类之前,我的Manager类是否应将这些Request对象转换为内部表示形式?将Web服务请求转换为内部表示?

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

这是否有意义?

回答

1

这是有道理的,如果你打算重用这些实现类我会打电话给你业务层

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

现在出现的问题是:如果您的业务层关心它将具有什么样的客户端?业务层的数据合同是否应由客户来决定,还是客户应该遵守业务层公开的数据合同?

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

只有一种情况我会考虑直接将请求类型一直使用到我的业务层:如果我绝对会(101%)确信我永远不会公开我的业务层除了SOAP Web服务。

的想法是,你只有在这两个主要选项:

1.保持相同的请求类型所有的地方。这样做的缺点是,如果您必须添加其他(非SOAP)客户端,您将会在业务层中进行大量重写。

OR

2.地图SOAP请求类型为内部类型。这样做的缺点是,你可能冒着重复代码和额外工作的风险,最终发现所有东西都是无用的,毕竟你不需要添加其他客户端。

想想你的情况,并仔细选择!但我必须告诉你,就我个人而言,迄今为止我还没有遇到过2号的劣势。我总是最终为这件事添加新的客户端,并在那一刻帮助从一开始就绘制了类型。