2012-02-23 11 views
0

私は明らかに私の問題を説明しようとします: 私は2つのテーブルを持っています:ドキュメントとカテゴリとそれらは多対多の関係を持っています。私はJavaでエレガントな方法でプログラミングすることを学んでいますので、もしあれば、私の無知を許してください。Javaで2つの要素間の関係を作成するにはどうすればよいですか?

データベースで検索していますが、結果セットからオブジェクトを作成するときに、取得した要素(ドキュメント)とそのカテゴリの関係が同じであることを示したいと思います。

私はクラスドキュメントとクラスカテゴリを作成しました。 Class Documentの属性としてCategoryのArrayListを追加する必要がありますか?カテゴリの属性としてDocumentのArrayList?

また、いくつかのドキュメントの変更を行う必要があります。Class DocumentでIDを作成する必要がありますか?これは混乱するかもしれませんが、私はちょうど「標準」方法で物事にしたい

public class Document { 
    private Integer id; // Id from DB, 0 if new object 
    private String name; 
    private String url; 
    private Date dateCreated; 
    private ArrayList<String> category; 

    // getters & setters... 
} 

私のクラスのドキュメントは、次のようになります!私は複数のクエリなどを使用して "汚い"方法でこれをすべて行う方法を知っています...しかし、もう一度私は経験豊富なOO開発者からアイデアが必要です!

EDIT: MVCを削除しました。 私はです。Javaで新しいですので、基本的なJava (ORMなし、フレームワークなし)を使用しています。私は休止状態が何であるかわからない、私は調査中です。

答えて

3

クラスドキュメントの属性としてカテゴリのArrayListを追加する必要がありますか?そして、 カテゴリのドキュメントとしてのArrayList?

あなたのオブジェクトにアクセスする方法によって異なります。それは、文書

document1.getCategories().get(0)... 

を経由してアクセスカテゴリにあなたのユースケースのために十分であり、あなたがこの

category1.getDocuments().get(0)... 

などのカテゴリを経由して文書にアクセスする必要はありません、単一を持ってするのに十分である場合リスト。この場合、それらのクラス間の関係を単方向と呼びます。両方の方法が必要な場合は、2つのリストが必要です。この場合、あなたの関係船は双方向です。とにかく一方向の関係で十分なら、その場合は両方のリストを同期させる必要がないので、その方が好きです。


また、私は更新が容易になるように、そのDB内のテーブルからIDを格納するクラスのドキュメントに属性IDを作成する必要があります、いくつかのドキュメントに変更を行う必要がありますか?

これは何らかの設計問題です。ほとんどの場合、サロゲート・データベース・キーを含めることは意味があります。これは、更新を簡単に実行できるようにするためです。とにかく、あなたのオブジェクトが他の属性(例えば名前)またはそれらの属性の組み合わせによって識別されることができるなら、もちろん代理キーを含める必要はありません。

private ArrayList<String> category; 

:あなたはこのような例では、リストを宣言した

:あなたは、Javaを学んでいることを私はいくつかの一般的な発言を追加したいと述べてきたように


ここでは、具体的な実装クラスArrayListではなく、インタフェースListを優先する必要があります。

private List<String> category = new ArrayList<String>(); 

これはあなたのコードは、もはや具体的な実装クラスに依存しないんとしてあなたは、実装のいずれかの種類(例えばArrayListをまたはLinkedListの)を使用できるようになります。

さらに、データベースオブジェクトをJavaオブジェクトにマッピングするためのフレームワークが多数用意されています。したがって、マッピングをたくさん行う必要がある場合は、それらのうちの1つを使用することを検討する必要があります(たとえば、休止状態)。

+0

ありがとうございます!では、私はこの "マニュアル"(?)マッピングについて自分自身に満足していますか?私は後でHibernateを調べます! – zwan

0

HibernateのようなORMを使用している場合は、文字列に1つではなくArrayList<Category>を使用します。それがより純粋なOOPアプローチになります。なぜこれをMVCとしてマークしたのか分かりません。

0

トーマスの答えはとても良いです。双方向の関係が必要な場合は、両側のパートナーのリストが一貫性を保つように注意する必要があります。

good article about this by Vincent Partingtonがあります。彼はJPAのためのオブジェクトを書くという観点から書いているが、彼が記述するパターン(普通のオブジェクトにはinternal*メソッド)は完全に適用可能である。

関連する問題