C++とJavaの両方で、ゲーム開発者、アニメーションソフトウェア開発者、Avatar開発者などがライブラリ/ DLLとして使用して製品を強化するためのミドルウェアSDKを開発しています。ミドルウェアAPIのベストプラクティスは何ですか?
私が知りたいことは、次のとおりです。これらのタイプのAPIを開発するための標準的なベストプラクティスはありますか?
私は使いやすさ、読みやすさ、効率性などの面で考えています
C++とJavaの両方で、ゲーム開発者、アニメーションソフトウェア開発者、Avatar開発者などがライブラリ/ DLLとして使用して製品を強化するためのミドルウェアSDKを開発しています。ミドルウェアAPIのベストプラクティスは何ですか?
私が知りたいことは、次のとおりです。これらのタイプのAPIを開発するための標準的なベストプラクティスはありますか?
私は使いやすさ、読みやすさ、効率性などの面で考えています
あなたが解決しているかに応じて、APIを設計する方法はたくさんあります。私は、この質問に対する完全な答えが、gang of four patterns bookのような本全体にふさわしいと思います。 Javaの場合、一般的なOOプログラミングだけでも、私はEffecitve Java 2nd Editionをお勧めします。最初のものは一般的なもので、一般的なプログラミングパターン、適用時およびその利点がたくさんあります。効果的なJavaはJavaを中心としていますが、その一部はプログラミング言語に適用するのに十分一般的です。
Framework Design Guidelinesをご覧ください。私はそれが.NET固有であることを知っていますが、あなたはおそらくそれからも多くの一般的な情報を学ぶことができます。件名に
YRPで言及したジョシュ・ブロッホからのビデオは古典的である - 私は2番目のものの推薦。
いくつかの一般的なガイドライン:
がDLLではなく静的ライブラリとしてライブラリを配布してください:私は、次の二つのことを学んできたWindows上でサードパーティのライブラリを使用してから、
。これにより、異なるcコンパイラとリンカ間の互換性が向上します。 Visual C++の静的ライブラリのもう1つの問題は、ランタイムライブラリを選択すると、異なるランタイムライブラリを使用してライブラリとコードが互換性がなくなり、ランタイムライブラリごとにライブラリの1つのバージョンを配布する必要が生じることです。
可能であれば、C++を避けてください。 C++の名前のマングリングは、異なるコンパイラによって大きく異なり、Visual C++用に構築されたライブラリは、Windowsの別のビルド環境からリンクすることはできません。それはCになると、特にdllのを使用する場合、物事ははるかに優れています。
実際にC++の優れた部分(コンストラクタやデストラクタによるリソース管理など)を取得したい場合は、C++の便利なレイヤーを構築して、c関数を隠すソースコードとして配布します。ユーザーはソースを持ち、それをローカルでコンパイルするので、ローカル環境には何の名前もないし、abiの問題もありません。
JavaからC/C++コードを呼び出すことについてあまり知らないと、名前の変更に関する問題のために、C++コードよりもCコードで作業する方が簡単だと思います。
"Imperfect C++"という本は、私が非常に参考にしたライブラリの互換性に関する議論をしています。