2

GAE を使用して RESTfull Web サービスを開発しています。私のテクノロジー スタックは、Jersey、Spring、Objectify に重点を置いています。

あなたがObjectifyを知らないなら...

「Objectify は、Google App Engine データストア専用に設計された Java データ アクセス API です。それは「中間」を占めています。JDO や JPA よりも使いやすく透過的ですが、低レベル API よりもはるかに便利です。Objectify は、初心者がすぐに生産性を発揮できるように設計されているだけでなく、GAE データストアの能力を最大限に発揮できるように設計されています。」</p>

https://code.google.com/p/objectify-appengine/

今のところ、Objectify Keys を使用してモデルに関係を保存しています。このような ...

public class MyModel {

    @Id private Long id;
    private Key<MyOtherModel>> myOtherModel;
    ...

Objectify キーは、Long ID と比較して追加の機能を提供しますが、静的メソッド Key.create(...) を使用して、Long ID と MyOtherModel.class から作成できます。

Key.create(MyOtherModel.class, id)

そのため、モデル レベルで Objectify キーとしてリレーションシップを正確に保存する必要はありません。より一貫性があると思いました。

問題は、モデル オブジェクトを JSON にシリアル化し、それらを JSON から Java オブジェクトに逆シリアル化するときに、Objectify キーを Long ID に変換する XML アダプターを作成するために、多くの追加コードを記述する必要があることです。

必要に応じて、代わりに長い ID を使用し、DAO で Objectify キーを作成することを考えていました。また、これにより、DAO ではないものから Objectify 固有のコードが削除されます。

より経験豊富なプログラマーからの視点が欲しいです。このサイズのソフトウェアを作成したことはありません。数千行のコードです。

どうもありがとうございました。

4

2 に答える 2

2

私も経験の浅いデータストア/オブジェクト化開発者なので、ここではただ考えています。

MyModel の Key<> 型を Long id に置き換えると、物事が簡単になるというあなたの指摘がわかりました。ただし、Key<> オブジェクトにはパス (および種類と ID) を含めることができることに注意してください。したがって、データ モデルがより複雑になり、MyOtherModel がルートの種類ではなくなった場合、Long id から Key<> を生成する機能が失われます。

それが起こらないことがわかっている場合、または後で MyModel を変更してもかまわない場合は、それは問題ではないと思います。

シリアル化形式については、文字列を使用してキーまたは ID を保持することをお勧めします。Long id は文字列に変換できますが、JSON の場合はとにかく変換​​する必要があります (効率が低下することはありません) が、後で同じ文字列を使用して完全なキーを保持することもできます。

于 2013-09-27T16:00:26.327 に答える
1

それらを long (または Long または String) として保存し、getMyOtherModelKey() のメソッドを使用して、静的メソッドを呼び出した後にキーを返すこともできます。ID を返すだけの getMyOtherModelID() を使用することもできます。キーまたは ID のみを保存すると、両方の方法を使用できるため、これは実際には両方の方法で機能します。

モデルのいずれかで親を使用する場合、トリックが発生します。ID だけでは他のモデルを取得するのに十分でない場合は、ID とすべての親 (および必要に応じて祖父母) の ID が必要です。これがKeysのいいところです。

于 2013-11-12T14:48:40.173 に答える