2012-04-06 13 views
0

GAEで小さなアプリケーションを作成しようとしています。私はJavaとネイティブDatastoreServiceを使ってデータを扱っています(Objectifyは可能ですがそれほど変わらない)。GAEでのデータアクセス

私は、オブジェクト指向設計を維持し、データストアを効率的かつトランザクション的に使用する方法を理解するのに苦労しています。

私はゲームを構築しようとしているので、私はルーム、モンスター、選手などをそれぞれクラスとして持っています。プレイヤーが移動や攻撃のような行動をすると、データの一部をロードして変更し、それを1つのtxに保存しなければならないので、異常は起こりません。

データストアサービスインスタンスを呼び出し階層全体に渡す必要がありますか、各クラスのDatastoreServiceを取得する方がよいでしょうか? トランザクションを開始してからEntityを置くとデータストアが一貫性のあるビューを保証するので、私はまだtxにいるのでnullになります。どうすればいいですか?

ありがとう、 Ido。

答えて

1

まず、Objectifyを注意深く見なければならないと思います。トランザクションやオブジェクトの埋め込みがかなり簡単になります。

第2に、Objectiveオブジェクト(またはDatastoreServiceオブジェクト)を取得するためにGuiceなどの依存性注入フレームワークを使用することを真剣に検討します。コードを最後にきれいにするだけでなく、有用なスキルを教えます将来のために。

依存関係注入を使用しない場合や、そうした場合でも、コードをデータ自体とは異なるクラスに制御することをお勧めします。これは常に最善の戦略ではありませんが、私はそれが普通だと思います。たとえば、モンスターとプレイヤーを同時に更新して保存したいと思っている場合、モンスターまたはプレーヤーにコードをどこに置くのですか?私は時には、この種のことを行うために別のデータアクセスオブジェクトを使用するのが最も簡単であることがわかります。それがちょっとした作業であれば、サーブレットで実行してください。

Objectifyサンプルアプリケーションは、Guiceを使用しますが、DAOは使用しません。

+0

こんにちは、お返事ありがとうございます。サンプルアプリを見ていきます。サンプルアプリケーションをお持ちの場合は素晴らしいでしょう。もちろん、私のデータアクセスコードは私のエンティティの中にありません。問題は、パフォーマンスだけでなく、懸念の分離を維持するためにどこに置くかです。 –

関連する問題