0

私はこれをやりたいです(特定の言語はありません):

print(foo.objects.bookdb.books[12].title);

またはこれ:

book = foo.objects.bookdb.book.new();
book.title = 'RPC for Dummies';
book.save();

fooが実際にIPCを介してプログラムに接続され、そのメソッドとオブジェクトにアクセスするサービスである場合、一部のレイヤーは実際にネットワークを介してメッセージを送受信します。

選択できるものがたくさんあるので、今、私は実際にはIPCメカニズムを探していません。XMLベースではなく、sである可能性があります。th。Googleのプロトコルバッファ、dbus、CORBAなど。私がよくわからないのは、他のオブジェクトと同じようにIPCにアクセスできるようにアプリケーションを構造化する方法です。

言い換えれば、プロセスの境界を越えて透過的にマッピングするOOPをどのように作成できますか?

これは設計上の問題であるというわけではなく、私はまだアーキテクチャ全体のかなり高いレベルで作業しています。ですから、私はこれがどの言語になるかについてはまだかなり不可知論者です。ただし、C#、Java、Pythonはすべて使用される可能性があります。

4

3 に答える 3

2

あなたが要求していることを行う方法は、すべてのオブジェクト通信をメッセージパッシングと見なすことだと思います。これは、オブジェクト メソッドが ruby​​ や smalltalk などでどのように処理されるかです。

オブジェクト通信メカニズムとして (メソッドの呼び出しではなく) メッセージの受け渡しを使用すると、コードを記述したときに存在しなかったメソッドの呼び出しなどの操作が適切になります。手順、データベースなどから同じ名前のフィールドの値を返す、「メソッドが見つかりません」例外をスローする、または考えられるその他のこと)。

これをデフォルトのメカニズムとして使用しない言語の場合、とにかくメッセージの受け渡しを行うことができます (すべてのオブジェクトに「handleMessage」メソッドがあります) が、構文の優れた機能を取得できず、そうではないことに注意することが重要です。 IDE に handleMessage メソッドを解析させて有効な入力をチェックさせるために余分な労力を費やすことなく、IDE ヘルプを取得できます。

于 2008-10-13T11:44:24.677 に答える
0

JavaのRMIを読んでください。紹介資料では、リモートオブジェクトのローカル定義を作成する方法を示しています。

秘訣は、同じメソッドシグネチャを持つ2つのクラスを持つことです。クラスのローカルバージョンは、一部のネットワークプロトコル上のファサードです。リモートバージョンは、ネットワークを介して要求を受信し、オブジェクトの実際の作業を実行します。

クラスのペアを定義して、クライアントが持つことができるようにすることができます

foo= NonLocalFoo( "http://host:port" )
foo.this= "that"
foo.save()

また、サーバーはクライアント接続からset_this()およびsave()メソッド要求を受信します。サーバー側は、検出とインスタンス管理の問題がたくさんあるため、(一般的に)重要です。

于 2008-10-17T02:15:03.917 に答える
-1

あなたはそれをすべきではありません!プログラマーにとって、IPC/RPC とコード内のローカル メソッド呼び出しの違いを見て感じることは非常に重要です。彼らがそれについて考える必要がないようにすると、彼らはそれについて考えなくなり、パフォーマンスの非常に悪いコードにつながります。

のことを考える:

foreach o, o.isGreen in someList { 
   o.makeBlue; 
}

プログラマーは、ループが完了するのに数ナノ秒かかると想定していますが、someList がたまたまリモートにある場合は、1 秒近くかかります。

于 2008-10-13T12:22:41.760 に答える