外部系统集成最佳实践

时间:2012-05-10 17:15:16

标签: java architecture integration

快速询问与外部系统集成的最佳做法是什么。

我们有一个系统来处理我们用自己的对象代表的公司。我们还通过SOAP使用外部系统来返回Organization对象。它们非常相似但不相同(我们的是他们的一部分)。

我的问题是,我们是否应该通过Facade包装SOAP服务,以便我们只将Company对象返回给我们的应用程序,或者我们应该返回另一种类型的对象(例如OrgCompany),甚至只是在我们的代码中使用Organization对象。

SOAP服务和组织对象由外部公司(银行)定义,我们无法控制。

非常感谢任何建议和理由。

6 个答案:

答案 0 :(得分:5)

我的两分钱,将外部对象引入应用程序总是一个问题。特别是在维护期间小的服务更改可能会导致应用程序中的代码更改。

在外部服务和应用程序之间进行层抽象总是好的。我建议创建一个服务层,它将外部服务对象转换为您的应用程序域对象,并在应用程序中使用它们。明确的分离/分离有助于维护。

下图描绘了上述内容。

enter image description here

答案 1 :(得分:1)

我无法想到使用其他公司控制的对象的任何情况。您应该做的第一件事就是将这些对象桥接到您自己的对象中。此外,通过拥有自己的对象,您可以将其功能扩展到您连接的第三方提供的功能之外(例如,如果将来您需要与多个公司对象提供商进行通信)

查看Adapter pattern

答案 2 :(得分:1)

您在此处的决定是如何管理应用程序中的外部代码依赖项。您的决定应该考虑的一些因素: 1)API的频率变化,变化的预期性质是什么? 2)您的应用程序在其外观之外的实用程序是什么?如果您删除了SOAP服务依赖项,您的应用程序是否仍然可以实现目的?

防御性方法是围绕SOAP服务构建外观或适配器,以便您的代码仅依赖于您的对象模型。这为您提供了很多控制,并在您的代码/逻辑和服务之间实现了相对松散的耦合。您为此控件支付的价格是,当SOAP合约更改时,您通常还必须更改代码层。

另一种方法是直接使用您从WSDL获取的对象。当在您的应用程序之间在客户端代码之间引入一个间接级别没有意义时,这是有益的,即您的应用程序只是一个不同系统的馈送器,而应用程序的整个要点是将组织对象填充到一个JMS管道或类似的东西。如果SOAP API契约永远不会改变,并且您不希望应用程序的输出发生很大变化,那么引入额外的间接层将会长期阻碍代码库的可读性。

大多数j2ee开发人员倾向于采用前一种方法,因为他们的应用程序的性质,并希望将他们的应用程序逻辑与数据源的细节分开。

希望这会有所帮助。

答案 3 :(得分:1)

我支持Sridhars的建议,我只想补充一点,为了将外部服务对象转换为您的应用程序域,您可以使用Dozer:

http://dozer.sourceforge.net/documentation/mappings.html

答案 4 :(得分:0)

我通常总是将Adapt外部定义的域对象作为内部表示。

我还针对外部域对象创建了一套全面的测试,如果外部供应商生成新版本,它将快速突出显示任何问题。

答案 5 :(得分:0)

Enterprise service bus架构在这里可能很有用

  

它的主要用途是企业应用集成   异质和复杂的景观。

(来自Wikipedia

如果您正在寻找开源解决方案,我会查看开源Mule