我们有一些涉及构建应用程序的项目,该应用程序由50%的自定义功能组成,但是然后引入了一个wiki,一个论坛以及其他已经发明的“轮子”的组件。我们不希望从头开始重写。
这些第三方应用程序通常拥有自己的数据库,主题和身份验证系统。根据我的经验,让事情像单点登录或共同主题一样工作,或者在多个子应用程序中跨实体进行标记/搜索是非常具有挑战性的问题。这种集成项目有哪些最佳实践?
到目前为止,我们的方法是尝试仔细挑选您的组件,选择具有明确定义的API的组件,最好是通过HTTP(如REST或SOAP),尽管这并不总是可行的(我们没有找到一个像这样工作的体面论坛)。人们可以给那些试图做到这一点的人提供建议,因为我怀疑这些天我们中的许多人越来越频繁了吗?
答案 0 :(得分:1)
如果您要使用开源库,请选择具有良好许可证的库。我发现了许多公司回避LGPL等许可证的困难方式(在尝试OEM应用程序时)。我不会详细说明为什么,但他们更喜欢Apache,BSD或MIT风格的许可证。
挑选已经存在一段时间的工具。查看社区并确保它处于活动状态。查看其他人正在使用的内容并使用这些工具。
选择能够很好地协同工作的技术。我整理了一个使用ORM和Web服务的应用程序。用于ORM的Spring Framework + Apache CXF + JPA创建了一个很好的技术堆栈。我使用的所有工具都很容易在Spring中结合在一起,使它们易于一起使用。你要做的最后一件事是选择你必须编写一堆代码才能将它们一起使用的工具。
选择基于标准的技术。这样,如果库或工具死亡,您可以轻松切换到使用相同标准的另一个。
答案 1 :(得分:1)
确保您的应用程序与第三方应用程序或库之间的接口是这样的,以便您可以使用其他内容轻松替换它以防万一。在某些情况下,第三方软件可能只是标准API的实现(Java在JDBC,JMS,JNDI等方面做了很多工作)。在其他情况下,这意味着将第三方库包装在您提出的某些API中。
当然,有时候会把这个想法抛到窗外,让事情与第三方软件紧密结合。请确保您真的想要将您的应用程序绑定到该第三方。一旦你沿着这条路走下去,真的很难回头改变主意。
答案 2 :(得分:0)
Donald Knuth说,可重用的代码甚至比可修改的代码更好,所以如果没有API,你应该寻找一个写得好的开源应用程序,因此可以自定义。
至于数据库和登录系统以及其他编程部分(我不知道主题如何可以受益),你也可以尝试,根据情况包装东西,以便模块认为它是自己的,但实际上与你说话代码。
答案 3 :(得分:0)
我的方法是使用第三方代码来实现某些核心功能。例如,我使用Subsonic进行数据访问,使用Devexpress组件进行UI,使用Peter Blum Data Entry Suite进行数据输入和验证。 Subsonic是开源的,Devexpress Peter Blum的控件有源代码,需要额外付费。如果我自己编写这些控件,我将无法获得这些控件的功能。
这种方法使我能够专注于我的应用程序的自定义功能,而不必担心我将如何访问数据库或如何使一个看起来很漂亮的可编辑的treelist。当然我没有一个完全配置和工作的论坛,但我知道我将为我的应用程序使用SQL数据库,我不必尝试让不同的数据存储组件协同工作。我没有维基,但我知道如何使用devexpress ui组件,格式化和验证数据输入与Peter Blum的控件轻而易举。换句话说,学习工具(当然要仔细选择它们),这将加速所有项目的开发,然后您可以专注于必须自定义的应用程序部分。
只要源代码可用,我就不太关心它是否是开源的。如果它是开源我捐赠给项目。如果它是商业组件,我将支付合理的价格。无论如何,这些工具有助于使编程变得有趣,并且结果具有数据完整性并且外观漂亮。如果我开发一个wiki或论坛,我知道我可以让它们无缝地协同工作。最后,我提到的所有工具已经存在了很长时间,并且由具有良好声誉的杰出开发人员编写。