针对不同版本的外部API构建Scala



我正在编写一个小库,我希望它能向后兼容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构建我的代码。

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

我认为您应该将库分为两部分——一部分使用FooFoo_v1中使用的功能,另一部分取决于第一部分和FooFoo_v2,并使用FooFoo_v2中的功能。如何实现它取决于您的代码。。。如果太难的话,最好听从@rex-kerr的建议——维持两个分支。

我只需在一个存储库中保留项目的单独分支(一个足够强大的分支,可以让你轻松地编辑一个分支并将其合并到其他分支中——git将是我的第一选择)。

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

最新更新