我们正在开发一个中间件软件开发工具包,用C++和Java编写,作为库/动态链接库,供游戏开发人员、动画软件开发人员、阿凡达开发人员使用,以增强他们的产品。
我想知道的是:对于这些类型的API的开发,是否有标准的“最佳实践”?
我在考虑可用性、可读性、效率等。
发布于 2008-09-16 11:48:57
通过在Windows上使用第三方库,我学到了以下两件事:
尝试将您的库作为DLL而不是静态库进行分发。这使得不同的c编译器和链接器之间具有更好的兼容性。visual c++中静态库的另一个问题是,运行时库的选择可能会使库与使用不同运行时库的代码不兼容,最终可能需要为每个运行时库分发一个库版本。
如果可能,请避免使用c++。在不同的编译器之间,c++名称的损坏有很大的不同,并且为visual c++构建的库不太可能链接到windows中的其他构建环境。当涉及到C语言时,事情要好得多,特别是如果你使用dll的话。
如果您真的想要获得c++的好部分(例如通过构造函数和析构函数进行资源管理),那么可以在c++中构建一个方便的层,您可以将其作为源代码分发,从而隐藏您的c函数。因为用户拥有源代码并在本地编译它,所以它在本地环境中不会有任何名称篡改或abi问题。
在不太了解从Java调用c/c++代码的情况下,由于名称混乱的问题,我希望使用c代码比使用c++代码容易得多。
“不完美的C++”这本书中有一些关于库兼容性的讨论,我发现这对我很有帮助。
发布于 2008-09-15 14:31:52
yrp提到的Josh Bloch的视频是一个经典的视频-我同意这个建议。
一些一般的指导原则:
不要使用单例模式,或者至少要极其谨慎地使用它。H210<代码>H111创建包和类级javadoc,解释用法和概念。<代码>H212<代码>G213
发布于 2008-09-15 12:43:12
有很多方法可以设计apis,这取决于您要解决的问题。我认为这个问题的完整答案值得写一整本书,比如the gang of four patterns book。对于Java,以及一般的面向对象编程,我推荐使用Effective Java 2nd Edition。第一个是通用的和许多流行的编程模式,当它们应用时,以及它们的好处。Effective Java是以Java为中心的,但它的某些部分足够通用,可以应用于任何编程语言。
https://stackoverflow.com/questions/62398
复制相似问题