1

私は、ArrayListsを使用して、データとそれらの間の1対多/多対多の関係を表すいくつかのPOJOクラスを使用して、J2SEデスクトップアプリケーションに取り組んでいます。コレクションを使用してデータを管理し、Java の PropertyChangeListener を使用してモデル イベントを発生させ、モデルを分離した状態に保つだけです (Python のバックグラウンドから来て、DAO パターンで必要な繰り返しとボイラープレートの量は、作成して維持するのが正気ではないようです) )。

そのため、このアプリケーションでファイルを保存するために、最初はシリアル化を使用しました。ソフトウェアのドメイン オブジェクトの更新により、以前に保存されたファイルとの下位互換性が失われたため、これはもちろんひどい決定でした。

その後、JAX-B に移行することにしましたが、この架空の出力を見てください。

<Person>
  <Todo>
    <title>Task 1</title>
  </Todo>
</Person>

<Category>
  <title>Category 1</title>
  <Todo>
    <title>Task 1</title>
  </Todo>
</Category>

TodoPerson の が Category の Todo と同じであることを確認する手段がありません。フィールドを追加idして、モデルの静的変数として最大 ID を追跡できると思いますが、それは多くの定型文のようで、ID で検索してコレクションにデータを入力する作業のようです。

この種の問題に対する標準的なアプローチはありますか。また、Java コミュニティーで最も広く使われているソリューションは何ですか。

4

2 に答える 2

1

これを行うための「標準的な」方法はありません。ただし、検討したいオプションは、オブジェクトをJSONとしてシリアル化することです。次に、JSONをファイルに保存するか、Redisのような小さなKey-Valueストアに保存できます。JSONの利点のいくつかは?

  • 特に保存前に圧縮した場合は、かなりコンパクトな形式です。
  • 簡単に解析でき、既存のライブラリを大量に利用して作業を行うことができます
  • かなり簡単に転送できる要素(たとえば、ドメインモデルが変更された場合)
  • 人間が読める形式。

また、一部のJSONライブラリ(Jackson 2+など)はオブジェクトIDを追跡できるため、データの繰り返しを非要因にします。

于 2013-01-14T02:22:14.043 に答える
0

XMLに3行を追加して、関係を定義できます。

<Person>
  <title>Person 1</title>
  <Todo>
    <title>Task 1
      <category>Category 1</category
    </title>
  </Todo>
</Person>

<Category>
  <title>Category 1</title>
  <Todo>
    <title>Task 1
      <person>Person 1</person>
    </title>
  </Todo>
</Category>
于 2013-01-14T02:02:15.967 に答える