A User
可以屬於不同的Group
s。並且(根據定義),Group
可以具有不同的成員。因此,以下類:擺脫循環依賴
class User {
List<Group> groups;
public User() {
// initialize groups here
}
}
class Group {
List<User> members;
public Group() {
// initialize members here
}
}
的問題是,當我創建一個User
,它需要創造一個Group
,當我創建Group
,它需要重新創建User
。我如何擺脫這種無限遞歸?
這裏就是我想要做的事:
我有一組User
S,Group
S和映射他們都存儲在數據庫中的關係。
每當有人需要使用User
時,他們創建一個new User(<someId>)
。這爲他們提供了一個新的User
對象,它是實際從數據庫中提取數據的類的代理(如RealUser
)。在內部,我保留了RealUser
的緩存,這樣我就不會從數據庫中兩次獲取每個User
。同樣,Group
將是RealGroup
類的代理。
這就是原因爲什麼我在User
的內部創建了Group
,反之亦然。他們都代表真正的課程。
這是一個問題域問題。爲什麼用戶需要創建一個組*和*反之亦然? – 2015-02-09 22:15:43
換句話說,問題是他們需要彼此創造,而不是創造彼此是有問題的,這是。 – keyser 2015-02-09 22:17:08
這個結構從一開始就有缺陷。這意味着一個用戶由多個組組成,每個組由多個用戶組成(包括初始用戶和其他許多複製的用戶)。你需要的是一組用戶,一組組,一個關係「是成員」和一個關係「包括」。 – 2015-02-09 22:26:21