我们正在开发 C++ 和 Java 的中间件 SDK,供游戏开发人员、动画软件开发人员、Avatar 开发人员等用作库/DLL 以增强他们的产品。
我想知道的是:开发这些类型的 API 是否有标准的“最佳实践”?
我在考虑可用性、可读性、效率等方面。
我们正在开发 C++ 和 Java 的中间件 SDK,供游戏开发人员、动画软件开发人员、Avatar 开发人员等用作库/DLL 以增强他们的产品。
我想知道的是:开发这些类型的 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 函数的源代码分发。由于用户拥有源代码并在本地编译它,因此本地环境不会出现任何名称修改或 abi 问题。
在不太了解从 Java 调用 c/c++ 代码的情况下,由于名称修饰问题,我希望使用 c 代码比使用 c++ 代码更容易。
“Imperfect C++”一书有一些关于库兼容性的讨论,我觉得很有帮助。
yrp 提到的 Josh Bloch 的视频是经典之作 - 我支持该建议。
一些一般准则:
有很多方法可以设计 api,具体取决于您要解决的问题。我认为这个问题的完整答案值得一整本书,例如四模式书的帮派。特别是对于 Java,也只是一般的 OO 编程,我会推荐Effective Java 2nd Edition。第一个是通用的和许多流行的编程模式,当它们适用时和它们的好处。有效的 Java 以 Java 为中心,但它的某些部分足够通用,可以应用于任何编程语言。
看看框架设计指南。我知道它是特定于 .NET 的,但您也可以从中学到很多一般信息。