我正在编写一个小型库,我希望它可以向后兼容旧版本的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构建我的代码。
忽略依赖关系管理的细节,对于这样的事情,什么是正确的高级方法?我的目标是让它尽可能简单。
答案 0 :(得分:1)
我只是将项目的单独分支保存在一个存储库中(一个足够强大,允许您编辑一个并毫不费力地合并到其他存储库中 - git将是我的第一选择。)
如果必须在运行时进行选择,那么您只能使用反射来处理任何新方法。
答案 1 :(得分:1)
我认为你应该将你的库分成两部分 - 一部分使用FooFoo_v1中的功能,另一部分依赖于第一部分和FooFoo_v2并使用FooFoo_v2中的功能。如何完成它取决于你的代码...如果它太难了,最好遵循@rex-kerr建议 - 维护两个分支。