2012-04-01 94 views
1

在我的Java應用程序中,我有一些實體,其中一些可能會引用另一個實體。應該避免雙向關係?

說我有一個實體:

class Work{ 
User manager; 
} 

class User{ 
    List works; 
} 

然後,如果我創建工作的一個實例,它將使一個用戶的參考誰將舉行工作的參考。

我害怕會有無盡的巢關係。

所以我想知道這是否應該避免或不?

+1

我不確定您的意思是「無盡的巢關係」,雖然它是完全可以接受的雙向關係,每個實體點在概念上和實踐上都是如此。 – davin 2012-04-01 12:25:02

+0

雙向關係不應該是首選,但有時難以避免。例如,如果你的類都實現了toString(),那麼就是危險的。 – nansen 2012-04-01 12:32:37

回答

2

這種雙向關係沒有問題。你似乎是因爲擔心某些類型的循環去遍歷UserWork造成的,然後再返回等

問問自己是否需要獲取給定UserWork S和User給予Work。如果是這種情況,那麼存儲雙向引用是有意義的。

+1

表示同意,但這些可能是方法不一定是成員變量。 – Randy 2012-04-01 12:32:11

1

這種雙向引用沒有問題。 我能想到的唯一情況是你可以進入'無限嵌套'的地方是,如果兩個類中的代碼都進入了方法的相互調用,例如

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用戶可以有多個Works(工作列表),但1個工作只能有1個用戶。因此,Work類中的用戶將成爲確定工作所有者的實體。因此,相應地命名它即clas工作{私人用戶擁有者; ...}