1

我正在编写一个小型库,我希望它与旧版本的 API 向后兼容,但尽可能使用最新 API 的功能。

例如,我有一个使用外部 API 的项目,我将其称为 FooFoo_v1。

最初,我的代码如下所示:

// in Widget.scala
val f = new Foo
f.bar

Foo 此后发布了他们的 API 的新版本 FooFoo_v2,其中添加了该bat方法。只要我针对新版本进行编译,就可以正常工作:

// in Widget.scala
val f = new Foo
f.bar
f.bat

但是,如果您尝试针对 FooFoo_v1 进行构建,则构建显然会失败。由于该bat功能确实是可选的,我希望允许人们针对 FooFoo_v1 或 FooFoo_v2 构建我的代码。

忽略依赖管理的细节,对于这样的事情,正确的高级方法是什么?我的目标是让它尽可能简单。

4

2 回答 2

1

我会简单地将项目的单独分支保存在存储库中(一个足够强大以允许您编辑一个并毫不费力地合并到其他分支中——git 将是我的第一选择)。

如果您必须在运行时进行选择,那么您只能对任何新方法使用反射。

于 2013-07-08T17:22:27.603 回答
1

我认为你应该将你的库分成两部分——一个使用 FooFoo_v1 的功能,另一个取决于第一个和 FooFoo_v2 并使用 FooFoo_v2 的功能。如何完成它取决于您的代码......如果太难,最好遵循@rex-kerr 的建议 - 维护两个分支。

于 2013-07-08T19:22:30.810 回答