在我的Java應用程序中,我有一些實體,其中一些可能會引用另一個實體。應該避免雙向關係?
說我有一個實體:
class Work{
User manager;
}
class User{
List works;
}
然後,如果我創建工作的一個實例,它將使一個用戶的參考誰將舉行工作的參考。
我害怕會有無盡的巢關係。
所以我想知道這是否應該避免或不?
在我的Java應用程序中,我有一些實體,其中一些可能會引用另一個實體。應該避免雙向關係?
說我有一個實體:
class Work{
User manager;
}
class User{
List works;
}
然後,如果我創建工作的一個實例,它將使一個用戶的參考誰將舉行工作的參考。
我害怕會有無盡的巢關係。
所以我想知道這是否應該避免或不?
這種雙向關係沒有問題。你似乎是因爲擔心某些類型的循環去遍歷User
到Work
造成的,然後再返回等
問問自己是否需要獲取給定User
的Work
S和User
給予Work
。如果是這種情況,那麼存儲雙向引用是有意義的。
表示同意,但這些可能是方法不一定是成員變量。 – Randy 2012-04-01 12:32:11
這種雙向引用沒有問題。 我能想到的唯一情況是你可以進入'無限嵌套'的地方是,如果兩個類中的代碼都進入了方法的相互調用,例如
class Work {
User manager;
public void doWorkStuff() {
manager.doUserStuff() {
}
}
class User {
Work works;
public void doUserStuff() {
works.doWorkStuff();
}
}
這種場景取決於設計。工作和用戶分享有什麼樣的關係?是1:m,m:1還是m:n?基於這個結果,我們應該相應地設計這個類。
根據你的問題,我可以看到1用戶可以有多個Works(工作列表),但1個工作只能有1個用戶。因此,Work類中的用戶將成爲確定工作所有者的實體。因此,相應地命名它即clas工作{私人用戶擁有者; ...}
我不確定您的意思是「無盡的巢關係」,雖然它是完全可以接受的雙向關係,每個實體點在概念上和實踐上都是如此。 – davin 2012-04-01 12:25:02
雙向關係不應該是首選,但有時難以避免。例如,如果你的類都實現了toString(),那麼就是危險的。 – nansen 2012-04-01 12:32:37