我需要帮助才能找到合适的课程设计。
我有一个用户类:
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实现这一点。
答案 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来进行无限循环的添加。然后尝试将该用户添加到组织等