【问题标题】:What are the best practices for the Middleware API? [closed]中间件 API 的最佳实践是什么? [关闭]
【发布时间】:2010-09-08 21:50:38
【问题描述】:

我们正在开发 C++ 和 Java 的中间件 SDK,供游戏开发人员、动画软件开发人员、Avatar 开发人员等用作库/DLL 以增强他们的产品。

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

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

【问题讨论】:

    标签: java c++ api middleware


    【解决方案1】:

    设计 API 的方法有很多种,具体取决于您要解决的问题。我认为这个问题的完整答案值得写一整本书,比如gang of four patterns book。对于 Java,以及一般的 OO 编程,我推荐Effective Java 2nd Edition。第一个是通用的和许多流行的编程模式,当它们适用时和它们的好处。有效的 Java 是以 Java 为中心的,但它的某些部分是通用的,足以适用于任何编程语言。

    【讨论】:

      【解决方案2】:

      看看Framework Design Guidelines。我知道它是特定于 .NET 的,但您也可以从中学到很多一般信息。

      【讨论】:

        【解决方案3】:
        【解决方案4】:

        yrp 提到的 Josh Bloch 的视频非常经典 - 我支持该推荐。

        一些一般准则:

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

        【讨论】:

          【解决方案5】:

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

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

          尽可能避免使用 c++。不同编译器之间的 c++ 名称修改差异很大,并且为 Visual c++ 构建的库不太可能从 windows 中的另一个构建环境链接。对于 C 语言,情况要好得多,尤其是如果您使用 dll。

          如果您真的想获得 c++ 的优点(例如通过构造函数和析构函数进行资源管理),请在 c++ 中构建一个便利层,将其作为隐藏 c 函数的源代码分发。由于用户有源码并在本地编译,所以本地环境不会有任何名称修改或 abi 问题。

          由于不太了解从 Java 调用 c/c++ 代码,我希望使用 c 代码比使用 c++ 代码更容易,因为名称修改问题。

          《Imperfect C++》一书中有一些关于库兼容性的讨论,我觉得很有帮助。

          【讨论】:

            猜你喜欢
            • 2019-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-21
            相关资源
            最近更新 更多