我们有一些项目涉及构建一个应用程序,该应用程序由大约 50% 的自定义功能组成,但随后引入了 wiki、论坛和其他我们尚未发明的“轮子”组件。希望从头开始重写。

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

到目前为止,我们的方法是尝试仔细挑选组件,选择具有明确定义的 API 的组件,最好通过 HTTP(例如 REST 或 SOAP),尽管这并不总是可行(我们还没有找到合适的组件)论坛就是这样运作的)。人们可以向任何尝试这样做的人提供建议吗?我怀疑我们中的许多人现在越来越频繁地这样做?

有帮助吗?

解决方案

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

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

其他提示

如果您要使用开源库,请选择具有良好许可证的库。我通过艰难的方式(在尝试 OEM 应用程序时)发现许多公司回避 LGPL 等许可证。我不会详细说明原因,但他们更喜欢 Apache、BSD 或 MIT 风格的许可证。

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

选择协同工作的技术。我已经组合了一个使用 ORM 和 Web 服务的应用程序。Spring Framework + Apache CXF + JPA 为 ORM 创建了一个很好的技术堆栈。我使用的所有工具都可以在 Spring 中轻松地结合在一起,从而可以轻松地一起使用它们。您最不想做的就是选择一些工具,您必须编写一堆代码才能将它们一起使用。

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

Donald Knuth 表示,比可重用代码更好的是可修改代码,因此,如果没有 API,您应该寻找编写良好且可以自定义的开源应用程序。

至于数据库和登录系统以及其他编程部分(我不知道如何例如主题可能会受益),您也可以尝试,根据情况包装内容,以便模块认为它是独立的,但实际上与您的代码进行对话。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top