【发布时间】:2010-09-08 21:50:38
【问题描述】:
我们正在开发 C++ 和 Java 的中间件 SDK,供游戏开发人员、动画软件开发人员、Avatar 开发人员等用作库/DLL 以增强他们的产品。
我想知道的是:开发这些类型的 API 是否有标准的“最佳实践”?
我在考虑可用性、可读性、效率等方面。
【问题讨论】:
标签: java c++ api middleware
我们正在开发 C++ 和 Java 的中间件 SDK,供游戏开发人员、动画软件开发人员、Avatar 开发人员等用作库/DLL 以增强他们的产品。
我想知道的是:开发这些类型的 API 是否有标准的“最佳实践”?
我在考虑可用性、可读性、效率等方面。
【问题讨论】:
标签: java c++ api middleware
设计 API 的方法有很多种,具体取决于您要解决的问题。我认为这个问题的完整答案值得写一整本书,比如gang of four patterns book。对于 Java,以及一般的 OO 编程,我推荐Effective Java 2nd Edition。第一个是通用的和许多流行的编程模式,当它们适用时和它们的好处。有效的 Java 是以 Java 为中心的,但它的某些部分是通用的,足以适用于任何编程语言。
【讨论】:
看看Framework Design Guidelines。我知道它是特定于 .NET 的,但您也可以从中学到很多一般信息。
【讨论】:
yrp 提到的 Josh Bloch 的视频非常经典 - 我支持该推荐。
一些一般准则:
【讨论】:
通过在 Windows 上使用第三方库,我学到了以下两点:
尝试以 DLL 而不是静态库的形式分发您的库。这为不同的 c 编译器和链接器提供了更好的兼容性。 Visual c++ 中静态库的另一个问题是运行时库的选择会使库与使用不同运行时库的代码不兼容,您最终可能需要为每个运行时库分发一个版本的库。
尽可能避免使用 c++。不同编译器之间的 c++ 名称修改差异很大,并且为 Visual c++ 构建的库不太可能从 windows 中的另一个构建环境链接。对于 C 语言,情况要好得多,尤其是如果您使用 dll。
如果您真的想获得 c++ 的优点(例如通过构造函数和析构函数进行资源管理),请在 c++ 中构建一个便利层,将其作为隐藏 c 函数的源代码分发。由于用户有源码并在本地编译,所以本地环境不会有任何名称修改或 abi 问题。
由于不太了解从 Java 调用 c/c++ 代码,我希望使用 c 代码比使用 c++ 代码更容易,因为名称修改问题。
《Imperfect C++》一书中有一些关于库兼容性的讨论,我觉得很有帮助。
【讨论】: