0

Java オブジェクト (およびその依存関係) を一種のスナップショットであるファイルまたはデータベースに透過的に保存するために使用できるオープンソース ライブラリを探しています。

ユース ケースの例: オブジェクト、プレーヤー、スコア、場所などのゲームの状態があります。ユーザーが [保存] をクリックすると、これらのオブジェクトを保存する必要があります (保存するすべてのオブジェクトに注釈を付けることができます)。ファイルまたはデータベース。後でシステムがクラッシュしたり、ユーザーがログインしたりしても、この時点から回復できるはずです。

可能な限り透過的かつ効率的に実行できるライブラリを探しています。お取引等は不要です。私の優先事項は

  1. オープンソース、無料、優れたドキュメント
  2. 使いやすさ。何かを変更した後、ユーザーがオブジェクトを手動で保存する必要はありません。彼がしなければならないのであれば、それは些細な活動であるべきです
  3. 安定
  4. スナップショットからの読み取りと回復が容易である必要があります。

上記の要件の 4 つすべてまたは少なくともかなりの部分をカバーするライブラリは存在しますか? 私はアスペクト指向のアプローチにオープンです

ユースケースに対して間違った q を尋ねていますか? 業界では非常に異なる方法で行われますか?

4

3 に答える 3

1

これを解決するには、Javaの組み込みシリアル化を使用できるはずです。自動的に保存する場合は、モデルを保存するレイヤーでモデルをラップします。これは、プロキシ(java.lang.reflect.Proxy)を使用して「自動的に」実行することもできます。

ただし、値は関連していることが多いため、通常、状態を自動的に保存することはお勧めしません。自分がどのレベルにいて、そのレベル内でどれだけ進んだかを追跡する進捗クラスを想像してみてください(たとえば、0%、25%、50%、75%)。

これで、レベル2を完了したばかりなので、進行状況を「レベル3、0%」に更新する必要があります。最初にレベルを設定すると、進行状況は(短期間で)「レベル3、75%」の状態になりますが、これは正しくありません。最初にどれだけ設定すると、「レベル2、0%」になります。プログラムがこれらのポイントのいずれかで停止した場合、ユーザーの状態は正しくありません。

于 2011-11-24T09:50:23.493 に答える
1

標準の Java シリアル化メカニズムを使用できます。保存したいすべてのクラスがタグ インターフェイスSerializableを実装している場合、必要なだけオブジェクトのグラフを透過的に保存できます。これは DB ではなくファイルですが、これらのオブジェクトをいつでもアプリケーションに読み戻すことができ、おそらくそれが最適な (または最初の) オプションです。

この方法の欠点は、データがバイナリであることです。つまり、メモ帳を使用して読み取ることができません。また、フォーマットはクラスで行われた変更に非常に敏感であるため、後方/前方互換性のサポートには問題があります。

その他の可能性は、オブジェクトを XML または JSON としてシリアル化することです。XML の場合は、JAXB または XStream を試してください。JSON については、こちらをご覧ください。

于 2011-11-24T09:44:45.080 に答える
0

ObjectInput/ObjectOutput-Stream と呼ばれる組み込み機能があります。

http://docs.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html

人間が読めるファイルが必要な場合は、XStream を使用することをお勧めします。

http://x-stream.github.io/faq.html

于 2011-11-24T09:47:02.977 に答える