これはソフトウェア設計に関する一般的な「素人」の質問なので、あいまいに思われる場合は申し訳ありませんが、アドバイスをいただければ幸いです。以下で説明するシステムは単なる例であり、私が考えている特定の製品ではないことに注意してください。
さまざまな言語で記述された複数のライブラリまたはユーティリティの機能を組み合わせる必要があることがよくあります。たとえば、デスクトップ向けの高性能オーディオ処理アプリケーションをコーディングする場合は、C / C++ で記述します。次に、素敵な GUI を追加したいと思います。しかし、私はQtを学びたくありません。Adobe Air のルック アンド フィールが気に入っているので、それを使いたいと思っています。後で、USB デバイスにアクセスする必要があります。しかし、私が持っている USB ライブラリには Java の API しかありません。これらすべての要素を組み合わせて、それらの相対的な強みを活用するにはどうすればよいでしょうか?
明らかに、これらのさまざまな要素を 1 つの実行可能ファイルにコンパイルすることはできません。そのため、それらを個別に作成して実行し、通信手段を提供する必要があります。これを行う最も一般的な方法は、共有メモリやソケットなどの IPC (Inter Process Communication) を使用することです。プログラムはネットワーク上の別々のマシンで実行される可能性があるため、ソケットのアイデアを好みます。
そこで、これらの要素が通信できるように、カスタム API を使用してローカル クライアント/サーバー システムを作成することにしました。たとえば、Air アプリケーションは C アプリケーションからメッセージを受け取り、UI を更新するよう伝えます。Java で実行されている USB アプリケーションは、ソケットを使用して USB ハードウェアから C アプリケーションにオーディオをストリーミングします。
私の質問: このようにローカル ソケットを使用するのは、そのようなシステムを設計するための典型的な方法ですか? パフォーマンスは、真のネイティブ アプリケーション (たとえば、Java または C のすべてを単一の実行可能ファイルに含む) よりもはるかに悪くなりますか? また、そのようなアプローチはバグが発生しやすく、保守が難しいと思われますか?
既存のソフトウェア ライブラリの限界に直面することがよくあります (たとえば、美しく柔軟な UI を備えたグラフィック ライブラリ、低レベルのハードウェアにアクセスする方法がない、または多くのオーディオ ストリームをミックスできるがサポートされていないメディア ライブラリなど)。ビデオの再生)、非常にイライラします。このような任意のソフトウェア ライブラリを組み合わせる最善の方法を誰かがアドバイスできれば、本当に感謝します。
前もって感謝します!