2

レンダリング システム、物理シミュレーション、UI の 3 つのコンポーネントがあります。UI コードはスクリプトで記述されており、信頼されていません。次に、物理シミュレーションの結果をレンダリング システムに伝達する必要がありますが、正しい設計が不明です。たとえば、新しい sim データをティックごとにレンダラーに単純にコピーすることができます。しかし、これは少し無駄のように思えます。sim のデータを直接操作するようにレンダラーを設定することもできますが、これはカプセル化に違反するようです。

私は、このシステムが潜在的に数千の移動ユニットで動作することを意図しているため、パフォーマンスを念頭に置いておく価値があります。

カプセル化に違反することなく、あるコンポーネントから別のコンポーネントにデータをすばやく移動するにはどうすればよいですか?

4

1 に答える 1

0

おそらく、レンダリングに必要なデータを保持するためにレンダラーにオブジェクトを割り当てさせるでしょう。これらのオブジェクトは、レンダラーがジョブを実行するのに十分な可視インターフェイスを定義しますが、それ以外は不透明です。オブジェクト自体はレンダラーによって割り当て/所有されていますが、ほとんどは不透明なタイプです。

シミュレーターは、これらのオブジェクトの内部に関する知識を所有しています (少なくとも、パブリック インターフェイスによって示されるよりも多くの知識が必要な場合)。レンダラーは基本的にそれらからデータを読み取るだけですが、シミュレーターはそれらの状態を変更したり、それらにデータを書き込んだりできます。

これを実装する 1 つの方法は、「仲介」オブジェクトに多重継承を使用することです。親の 1 つは、レンダラーが使用する限定的なパブリック インターフェイスを提供し、もう 1 つは、シミュレーターが使用するより包括的なインターフェイスを提供します。

もちろん、本質的に C++ 自体によって提供される保護を備えたものと同様に、これは基本的に事故からの保護であり、意図的な破壊ではありません。レンダラーに対するあなたの信頼の欠如は、潜在的なバグから基本的に保護していると思います。意図的にセキュリティを破壊しようとする可能性のあるレンダラーではありません。後者から保護する必要がある場合は、シミュレーターとレンダラーが別々のプロセスにあり、それらの間にある種の IPC があるなど、少なくとも OS レベルのメカニズムを使用する必要があると考えています (ただし、もちろん、これにより、ほぼ必然的にかなりのオーバーヘッドが追加されます)。

于 2012-05-11T16:34:03.517 に答える