5

Java クラスを作成する必要がある XML スキーマがあります。これは特に大きなスキーマではありません。約 20 クラスになると思います。自動バインド プログラム (JAXB や JiBX で提供されているものなど) を使用するか、独自のクラスを手動で記述してマーシャリング/アンマーシャリングに XStream などを使用するかを検討しています。

バインディング プログラムを使用するのではなく、独自のクラスを作成することの利点と欠点は何ですか。

また、私がバインディング プログラムを使用している場合、私はそれに永遠に縛られています。たとえば、JAXB のバインディング コンパイラを使用してクラスを作成する場合、すべてのマーシャリング/アンマーシャリングに JAXB を使用する必要がありますか?

ps XMLバインディング/シリアライゼーションに関する次の質問を見たことがありますが、これらは役に立ちましたが、私の質問に完全には答えませんでした:

4

2 に答える 2

14

あなたの質問に対する決定的な答えはないと思います。しかし、私はあなたに苦労して得たアドバイスをすることができます. 考慮すべき点は次のとおりです。

  1. マーシャリングとアンマーシャリングのコードを書くのは、特に最初は時間がかかります。

  2. DOM ライブラリ (Xerces またはそれに相当するもの) のニュアンスを学習するには、かなりの時間を費やす必要があります。

  3. 多くの重複があるため、最終的にはいくつかのヘルパー クラスを作成する必要があります。

  4. オプションの要素と属性の領域ですべてのベースをカバーしたことを確認するには、多くの単体テストが必要です。

そのリストを見ると、「それが JAXB の機能です」と言うのは簡単です。長年にわたってこれを行ってきたので、JAXB、特に Java 5/6 での JAXB の最新の反復により、かなりの時間と労力を節約できると言えます。

しかし、JAXB を使用する場合は、1 つの教訓を得ることができました。

*** JAXB で生成されたクラスがアプリケーションに漏れないようにしてください。

あなたが質問で言ったように、これはアプリケーション全体を JAXB のやり方に結び付けます。JAXB を置き換えなければならない場合 (将来そうする理由はいくつかあります)、挑戦的で骨の折れる作業に直面することになります (信じてください。再び位置)。

これで、JAXB で生成されたクラスを常にファサードまたはファクトリの背後に隠し、JAXB クラスから必要な動作を持つ独自のドメイン POJO にマッピングします。JDBC と同じように JAXB を考えます。JAXB は単なる別のデータ ソースであり、ドメイン POJO との間でデータを取得する別の方法です。ドメイン POJO は秘密のソースであり、それらがどのようにコーディングされ、どのように使用されるかを制御します。JAXB は、マーシャリングとアンマーシャリングのための単なるツールです。

于 2008-11-04T12:15:47.540 に答える
0

私は質問に対して長くて終わりのない戦争を始めたくありませんが、私の経験から-すべてのコードを生成し、信頼できるJARを必要としないツールを使用できる場合. 生成されるコードは醜いものになりますが、手書きのコードを手作りする必要性が明確にわかるまでは機能します。ほとんどの場合、これを行う必要はありません。申し訳ありませんが、使用するツールについてすぐに推奨することはできません。

于 2008-11-04T12:38:12.207 に答える