2012-04-01 11 views
1

私のJavaアプリケーションでは、私はいくつかのエンティティを持って、それらのいくつかは別のエンティティへの参照を持つかもしれません。双方向関係を回避する必要がありますか?

は、私はエンティティを持って言う:私は仕事の1つのインスタンスを作成する場合

class Work{ 
User manager; 
} 

class User{ 
    List works; 
} 

その後、それは仕事の参照を保持する1人のユーザーの参照を保持します。

私は無限の巣関係があることを恐れます。

これは回避すべきかどうか、私は疑問に思いますか?

+1

「無限のネスト関係」の意味はわかりませんが、各エンティティがポイントする双方向の関係を持つことは完全に容認できますが概念的にも事実的にも、他のものへと変化する。 – davin

+0

双方向の関係は好まれないはずですが、避けるのが難しい場合もあります。たとえば、クラスが両方ともtoString()を実装している場合は危険です。 – nansen

答えて

2

この双方向関係に問題はありません。あなたは

あなたはWork与えUserUser与えWork Sを取得するために必要かどうかを自問してみてくださいなど再びWorkUserを横断起因し、ループのいくつかの種類を心配しているようです。これが当てはまる場合は、双方向参照を格納することが理にかなっています。

+1

が合意しましたが、これらは必ずしもメンバー変数ではないメソッドである可能性があります。 – Randy

1

このような2方向参照の問題はありません。 「無限の入れ子」に入ることができる唯一の状況は、両方のクラスのコードがメソッドの相互呼び出しを取得した場合です。

class Work { 
    User manager; 

    public void doWorkStuff() { 
    manager.doUserStuff() { 
    } 
} 

class User { 
    Work works; 

    public void doUserStuff() { 
    works.doWorkStuff(); 
    } 
} 
0

このようなシナリオはデザインによって異なります。仕事とユーザーはどのような関係を共有していますか?それは1:m、m:1かm:nか?この結果に基づいて、クラスを設計する必要があります。

あなたの質問に基づいて、私は見ることができます1ユーザーは複数の仕事(仕事のリスト)を持つことができますが、1仕事は1人のユーザーしか持てません。したがって、Workクラスのユーザーは、作業の所有者を決定するエンティティになります。

関連する問題