Java:封装库的自动方式

时间:2011-10-07 07:51:01

标签: java eclipse encapsulation rcp

我有以下场景:我在Eclipse RCP应用程序中使用了一个非常大的外部库用于特定目的。

此时我不确定以后是否可能不必将此库替换为另一个库(因为它不提供必要的功能或类似的功能)。此外,我让用户从第一天开始使用这个库,所以我想封装库,让我至少有机会在将来更改库,而无需用户注意或不必更改代码中的任何内容。

是否有一种简单的方法以某种自动方式封装整个库?

2 个答案:

答案 0 :(得分:2)

除非你实际使用的库接口部分完全无关紧要,或者标准化JSF或JAX-B的方式(在这种情况下你不需要封装),这是一个完全浪费的努力。

我可以保证,如果你必须切换到不同的库,封装将证明毫无价值,因为其他库具有不同的基本概念和使用模式,无法使其适合现有的。

答案 1 :(得分:0)

我认为这是不可能的,因为库的语法和语义在某种程度上可能是唯一的。

当然,您可以为所有类创建代理并提供这些代理,但这可能需要相当多的工作(编写一个扫描库的框架),这并不能保证交换库很容易。

想象一下,替换将提供不同的方法,甚至使用不同的语义(在某种程度上)。如果替换中缺少方法/字段等怎么办?

处理这种情况的最佳方法是编写显式包装器并使用户只使用该包装器。这样,您可以将API限制为真正需要的核心概念。但是,根据库实际执行的操作,这仍然可能无法提供足够好的封装。

实施例

对于3D编程,您可以使用OpenGL或Direct3D。两者都有一些不同的API,但使用相同的核心概念。因此,您可以为它们创建一个提供统一API的包装器。那个包装器可能必须转换一些数据等(比如使面向列的matrics面向行,反之亦然)但由于核心概念是相同的,这应该是可行的。

但是,您需要坚持核心概念,不能使用其他功能。例如,Direct3D还会提供一些OpenGL不提供的高级API(Direct3DX)。