Architecture 将第三方模块集成到应用程序中的最佳实践

Architecture 将第三方模块集成到应用程序中的最佳实践,architecture,system-integration,Architecture,System Integration,我们有一些项目涉及到构建一个应用程序,该应用程序可能由50%的自定义功能组成,但随后引入了(比如)一个wiki、一个论坛和其他组件,这些组件是我们不希望从头开始重新编写的“轮子” 这些第三方应用程序通常有自己的数据库、主题和身份验证系统。在我的经验中,要想让一个单一的登录、一个共同的主题、或者在多个子应用程序中的实体之间进行标记/搜索,这些都是相当具有挑战性的问题。这种集成项目的一些最佳实践是什么 到目前为止,我们的方法是仔细挑选组件,选择具有明确定义的API的组件,最好是通过HTTP(如RES

我们有一些项目涉及到构建一个应用程序,该应用程序可能由50%的自定义功能组成,但随后引入了(比如)一个wiki、一个论坛和其他组件,这些组件是我们不希望从头开始重新编写的“轮子”

这些第三方应用程序通常有自己的数据库、主题和身份验证系统。在我的经验中,要想让一个单一的登录、一个共同的主题、或者在多个子应用程序中的实体之间进行标记/搜索,这些都是相当具有挑战性的问题。这种集成项目的一些最佳实践是什么


到目前为止,我们的方法是仔细挑选组件,选择具有明确定义的API的组件,最好是通过HTTP(如REST或SOAP),尽管这并不总是可能的(我们还没有找到一个合适的论坛可以这样工作)。有没有人可以给任何试图这样做的人一些建议,因为我怀疑我们中的许多人现在越来越频繁了?

Donald Knuth说,甚至比可重用代码更好的是可修改的代码,所以如果没有API,你应该寻找一个编写良好的开源应用程序,因此可以定制


至于数据库、登录系统和其他编程部分(我不认为主题化会有什么好处),您也可以尝试,具体情况取决于包装内容,以便模块相信它是自己的,但实际上与您的代码对话。

如果您使用的是开源库,请选择具有良好许可证的库。我发现了很多公司回避像LGPL这样的许可证的困难之处(在尝试OEM应用程序时)。我不会详细说明原因,但他们更喜欢Apache、BSD或MIT风格的许可证

挑选已经存在一段时间的工具。查看社区并确保其处于活动状态。查看其他人在使用什么,并使用这些工具

选择能够协同工作的技术。我已经组装了一个使用ORM和Web服务的应用程序。Spring框架+apachecxf+JPA为ORM创建了一个不错的技术栈。我使用的所有工具在Spring中都可以轻松地捆绑在一起,使它们易于一起使用。您最不希望做的事情就是选择您必须编写一组代码才能一起使用的工具


选择基于标准的技术。这样,如果库或工具死亡,您可以轻松地切换到使用相同标准的另一个库。

确保应用程序与第三方应用程序或库之间的接口,以便您可以轻松地替换为其他应用程序或库,以防万一。在某些情况下,第三方软件可能只是一个标准API的实现(Java在JDBC、JMS、JNDI等方面做了很多)。在其他情况下,这意味着将第三方库包装在您提出的某些API中


当然,有时我们会将这种想法抛到脑后,并将其与第三方软件紧密集成。只需确保您确实希望将应用程序绑定到第三方即可。一旦你走上这条路,就很难回头改变主意

我的方法是使用第三方代码实现一些核心功能。例如,我使用亚音速进行数据访问,使用DevXPress组件进行UI,使用Peter Blum数据输入套件进行数据输入和验证。亚音速是开源的,Devexpress-Peter-Blum的控件提供源代码需要额外付费。如果我试图自己编写这些控件,就不可能获得这些控件的功能

这种方法使我能够专注于应用程序的自定义功能,而不必担心如何访问数据库或如何制作一个看起来漂亮的可编辑树列表。当然,我没有一个完全配置和工作的论坛,但我知道我的应用程序将使用SQL数据库,我不必尝试让不同的数据存储组件协同工作。我没有wiki,但我知道如何使用DevXPress ui组件,Peter Blum的控件可以轻松地格式化和验证数据输入。换句话说,学习能够加快所有项目开发速度的工具(当然要仔细选择),然后您可以专注于需要定制的应用程序部分


我不太关心它是否是开源的,或者只要源代码是可用的。如果是开源的,我会捐赠给这个项目。如果它是一个商业组件,我将支付一个公平的价格。在任何情况下,这些工具都有助于使编程变得有趣,并且结果具有数据完整性,并且非常好看。如果我开发一个维基或论坛,我知道我可以让他们无缝地合作。最后,我提到的所有工具都已经存在很长一段时间了,都是由声誉卓著的优秀开发人员编写的

具体地说,我正在寻找一系列要尝试、避免或注意的事情。这是一个老问题,但我最近写了一篇关于依赖注入和系统设计的文章