0

GAE で小さなアプリケーションを作成しようとしています。私は Java とネイティブの DatastoreService を使用してデータを処理しています (Objectify も可能ですが、あまり変わりません)。

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

私はゲームを構築しようとしているので、部屋、モンスター、プレイヤーなどをそれぞれクラスとして持っています。プレイヤーが移動や攻撃などのアクションを行うとき、異常が発生しないように、データの一部をロードして変更し、すべてを 1 つの tx に保存する必要があります。

呼び出し階層全体に DatastoreService インスタンスを渡す必要がありますか?それとも、各クラスで DatastoreService を取得するだけの方がよいでしょうか? データストアは、トランザクションを開始した後に一貫したビューを確保し、エンティティを配置すると、まだ tx にいるために null を取得するため、どのように処理すればよいですか?

ありがとう、イド。

4

1 に答える 1

1

まず、Objectify を注意深く検討する必要があると思います。これにより、トランザクションやオブジェクトの埋め込み (たとえば) が非常に簡単になります。

第 2 に、Guice などの依存性注入フレームワークを使用して Objectify オブジェクト (または DatastoreService オブジェクト) を取得することを真剣に検討します。これにより、最終的にコードがかなりきれいになり、将来に役立つスキルを学ぶことができます。

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

Objectify サンプル アプリは、これらのビットに役立つ可能性があります。これは Guice を使用しますが、DAO 自体は使用しません。

于 2012-04-06T08:57:10.630 に答える