将第三方模块集成到应用中的最佳做法

时间:2020-03-05 18:48:56  来源:igfitidea点击:

我们有一些项目涉及构建可能由50%的自定义功能组成的应用程序,但随后引入了Wiki,论坛和其他已经发明的"轮子",而我们没有希望从头开始重写。

这些第三方应用程序通常具有自己的数据库,主题和身份验证系统。根据我的经验,让事情像单点登录或者通用主题一样工作,或者跨多个子应用程序中的实体进行标记/搜索是非常具有挑战性的问题。这种集成项目有哪些最佳实践?

到目前为止,我们的方法一直是尝试仔细选择组件,选择具有明确定义的API的组件,最好通过HTTP(例如REST或者SOAP),尽管并非总是可能的(我们还没有找到像样的组件)这样的论坛)。是否有人可以向尝试这样做的人提供建议,因为我怀疑这些日子我们中的许多人越来越频繁吗?

解决方案

回答

唐纳德·克努斯(Donald Knuth)说,再好的代码是可修改的代码,因此,如果没有API,则应该寻求一个编写得很好并且可以自定义的开源应用程序。

至于数据库和登录系统以及其他编程部分(我不知道主题化如何带来好处),我们还可以尝试根据情况进行包装,以便模块认为它是独立的,但实际上是在与代码对话。

回答

如果要使用开源库,请选择具有良好许可的库。我发现很难(当尝试为应用程序OEM时)许多公司都避开了LGPL之类的许可证。我不会详细说明为什么,但是他们更喜欢Apache,BSD或者MIT样式的许可证。

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

选择可以协同工作的技术。我将使用ORM和Web服务的应用程序放在一起。用于ORM的Spring Framework + Apache CXF + JPA创建了一个不错的技术堆栈。我在Spring中轻松使用了所有工具,将它们轻松地结合在一起使用。我们要做的最后一件事是选择一些工具,这些工具必须编写一堆代码才能一起使用。

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

回答

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

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

回答

我的方法是将第三方代码用于某些核心功能。例如,我将Subsonic用于数据访问,将Devexpress组件用于UI,将Peter Blum Data Entry Suite用于数据输入和验证。 Subsonic是开源的,Devexpress Peter Blum的控件提供了额外收费的源代码。如果我尝试自己编写这些控件,那么我将不可能获得这些控件的功能。

这种方法使我可以专注于应用程序的自定义功能,而不必担心如何访问数据库或者如何制作看起来很漂亮的可编辑树形列表。当然,我没有一个经过全面配置且可以正常使用的论坛,但是我知道我将为自己的应用程序使用SQL数据库,并且不必尝试让其他数据存储组件一起工作。我没有Wiki,但是我知道如何使用devexpress ui组件,并且Peter Blum的控件使格式化和验证数据输入变得轻而易举。换句话说,学习可以加快所有项目开发速度的工具(当然还要仔细选择工具),然后我们可以专注于应用程序中必须自定义的部分。

只要源代码可用,我就不太担心它是否是开源的。如果它是开源的,我将向该项目捐款。如果是商业用途,我将支付合理的价格。无论如何,这些工具都有助于使编程变得有趣,并且结果具有数据完整性并且外观精美。如果我开发了Wiki或者论坛,我知道我可以让他们无缝地协同工作。最后,我提到的所有工具都已经存在了很长时间,并且都是由享有盛誉的杰出开发人员编写的。