2012-04-13 7 views
1

私は、プレーヤーのアカウント/状態がサーバーに同期されているゲーム/アプリケーションを実装しています。私はエンティティのネストされたオブジェクトの変更を伝える一般的なフレームワーク(エンティティはユーザーのアカウントです)を検討しています。クライアントとサーバの両方がJavaで記述されている計算/反映についての議論について考えてみましょう(実際には、クライアントはプロパティを動的に変更できるActionscriptにあります)。変更をネストされたオブジェクトに伝播するパターン

とりあえず、Firebaseとします。

Service: PersistenceService 
Action: modifiedObjects 
Body: 
Objects [{"/full/Path/To/Object/1","newValue"},{"/full/Path/to/Object/2","newValue"}] 

ご入力のための私の要求は以下の通りです::ルートオブジェクト(Firebaseオブジェクト)の任意のオブジェクトへの変更は、おそらくのようなものに見える要求に伝播される)

1 /訂正してください。オブジェクトのツリーへの変更を伝播するためのこの一般的なフレームワークの実装に関する以下の考えを増強することができます。送信側では

、すべてのオブジェクトのいずれかのように思われる。)

1)は、それがルートエンティティ

2からのフルパスです保存するために必要なすべてのネストされたオブジェクトのプロパティへの変更が行われる必要があります反射的

OR

同期は修正のために、現在のオブジェクトツリーに最後の要求からエンティティの保存されたオブジェクトツリーを比較し、強制する必要があります。

サーバ側では、1回のリクエストで複数回アクセスされるオブジェクトをキャッシュするためにオブジェクトのパスを分析し、参照/検索コレクションによってツリーに複数回アクセスしないようにすることができます。

答えて

0

私が出ている答えは明らかに実際には非常に明白です:

は、あなたがこれをチェックすることがありますウィキに与えられたので、例が適用されないクライアントサーバー上の実装が必要それを行う最善の方法。答えは、テーブルのデータベースをミラーリングすることです。各オブジェクトにidを割り当て、すべてのオブジェクトをArrayListに格納します(または、各オブジェクトに型に基づいて一意のIDを割り当て、その型自体をHashMapに格納された型のArrayListに格納します)。

インタフェースServiceObjectとServiceContainerを呼び出します。

ここで私が見なければならないのは、jsonとprotostuffがオブジェクトへの二重参照をシリアル化する方法だけです。それらは別個のオブジェクトとしてシリアル化されていますか?もしそうなら、私はServiceObjectがArrayList内のオブジェクトへの参照として直列化を解除する必要があります。

0

一般オブザーバーパターンは、あなたが(ウィキから)持っている要件の種類にお答えさ

Observerパターン(別名。扶養、パブリッシュ/サブスクライブ)は、オブジェクトが、対象と呼ばれる、維持しているデザインパターンですオブザーバと呼ばれるその従属物のリストを取得し、通常はそのメソッドの1つを呼び出すことによって、状態の変化を自動的に通知します。主に分散イベント処理システムの実装に使用されます。

http://deepintojee.wordpress.com/2011/03/18/observer-pattern-applied-at-remote-level/

+0

関連しません。これは、前述のようにネストされたオブジェクトのデータを通信する形式ではなく、データをいつ、どのように通信するかのパターンです。 – MetaChrome

関連する問題