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