Middleware API的最佳实践是什么?

我们正在开发一个中间件SDK,用C ++和Java作为库/ DLL,例如,由游戏开发者,动画软件开发人员,Avatar开发人员来增强他们的产品。

我想知道的是:开发这些类型的API是否有标准的“最佳实践”?

我在考虑可用性,可读性,效率等方面。

我关于这个主题的两个最喜欢的资源: http : //mollyrocket.com/873和 http://video.google.com/videoplay?docid=-3733345136856180693

通过在Windows上使用第三方库,我学到了以下两点:

尝试将您的库分发为DLL而不是静态库。 这使得不同的c编译器和链接器之间的兼容性更好。 Visual c ++中静态库的另一个问题是运行时库的选择会使库与使用不同运行时库的代码不兼容,并且您可能最终需要为每个运行时库分发一个版本的库。

尽可能避免使用c ++。 c ++名称修改在不同编译器之间存在很大差异,并且为Visual c ++构建的库不太可能从Windows中的另一个构建环境进行链接。 说到C,事情要好得多,特别是如果你使用dll的话。

如果你真的想要获得c ++的优点(例如通过构造函数和析构函数进行资源管理),那么在c ++中构建一个方便的层,你将它作为源代码分发,隐藏你的c函数。 由于用户拥有源并在本地编译它,因此它不具有本地环境的任何名称mangiling或abi问题。

在不太了解从Java调用c / c ++代码的情况下,我希望使用c代码比使用c ++代码更容易,因为名称错误问题。

“Imperfect C ++”一书对库兼容性进行了一些讨论,我发现它非常有用。

yrp提到的来自Josh Bloch的video是一个经典 – 我推荐的第二个。

一些一般准则:

  1. 主要根据接口,工厂和构建器来定义API。
  2. 请明确指出哪些包和类是API的一部分。
  3. 提供专门用于编译API的jar。
  4. 不要过分依赖inheritance或模板方法模式 – 随着时间的推移,这会变得脆弱和破碎。
  5. 不要使用单例模式或至少使用它时要格外小心。
  6. 请创建解释用法和概念的包和类级别javadoc。

有很多方法可以设计apis,具体取决于你要解决的问题。 我认为这个问题的完整答案对于整本书来说是值得的,例如四人模式书 。 对于Java而言,以及一般的OO编程,我建议使用Effecitve Java第二版 。 首先是一般的和很多流行的编程模式,当它们适用时及其好处。 有效的Java是以Java为中心的,但它的一部分足以应用于任何编程语言。

看看框架设计指南 。 我知道它是特定于.NET的,但您也可以从中学到很多一般信息。