类设计 - 相关类之间的循环引用

时间:2010-07-08 18:20:15

标签: class

我需要帮助才能找到合适的课程设计。

我有一个用户类:

class AppUser:
    _email - String
    _fullname - String
    _organizations - List of ????
    _active - Boolean
    ------------------
    getOrgs - Method

另外,我有一个组织课程:

class Organization:
    _name - String
    _domain - String
    _members - List of ????
    ------------------
    getMembers

所以,我的问题是列表。 Org类有一个_members列表。此列表可能应该是AppUser对象的列表。而且,AppUser类有一个_organizations列表。该列表可能应该是组织对象的列表。

但这会创建一个循环引用。

那么,我该如何实现呢?

编辑: 需要使用Python实现这一点。

6 个答案:

答案 0 :(得分:1)

您没有指定您使用的语言。这很重要,因为在某些语言中,循环引用会导致问题(VB6),而在其他语言中则不会(Java,C#等)。在大多数情况下,您可以在类层次结构中使用循环引用,尤其是在使用使用垃圾收集进行内存管理的现代语言时。

答案 1 :(得分:1)

这被称为多对多关联。您还应该考虑是否需要双向导航性

答案 2 :(得分:1)

我没有看到每个具有您提到的引用的相应类的问题 - 它是多少域模型使用1: n 关系。

所以你的课程看起来像这样(C#):

public class AppUser {
public string Email { get; set;}
public string FullName { get; set;}
public bool Active { get; set;} 
public List<Organization> Organizations { get; set;} //... and so on
}

public class Organization {
public string Name { get; set;}
public string Domain { get; set;}
public List<AppUser> Members { get; set;} //... and so on
}

答案 3 :(得分:0)

我会看一下多对多的关系和第三种形式的规范化

答案 4 :(得分:0)

要做的一个重要区别是,在大多数现代语言中,对象列表是引用指针),而不是。这意味着您可以让成员指向组,而组可以指向成员。如果你所有的东西都是一个价值,那么你确实会有一个循环引用 - 每个小组都会尝试保留自己所有成员的副本,这些成员会尝试保留自己所有成员的副本等。

答案 5 :(得分:0)

为了避免重复,总的来说,我认为Set可能是首选的数据结构。

在组织中的成员集中使用AppUser可能是正确的呼叫。

与实体建立双向关系并没有错,他们只需要一点思考和计划。

要注意的重要一点是哪个实体控制着这种关系,这样当你去向组织添加一个AppUser时,你不会通过尝试将addOrganization用于AppUser来进行无限循环的添加。然后尝试将该用户添加到组织等

相关问题