Class 课堂设计&x2014;相关类之间的循环引用

Class 课堂设计&x2014;相关类之间的循环引用,class,Class,我需要帮助来找出我的课程的正确设计 我有一个用户类: class AppUser: _email - String _fullname - String _organizations - List of ???? _active - Boolean ------------------ getOrgs - Method 此外,我还有一门组织课程: class Organization: _name - String _domain

我需要帮助来找出我的课程的正确设计

我有一个用户类:

class AppUser:
    _email - String
    _fullname - String
    _organizations - List of ????
    _active - Boolean
    ------------------
    getOrgs - Method
此外,我还有一门组织课程:

class Organization:
    _name - String
    _domain - String
    _members - List of ????
    ------------------
    getMembers
所以,我的问题是名单。Org类有一个_成员列表。此列表可能是AppUser对象的列表。AppUser类有一个组织列表。此列表可能是组织对象的列表

但这将创建一个循环引用

那么,我应该如何实现这一点呢

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

我将查看多对多关系和第三表单规范化

我将查看多对多关系和第三表单规范化

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

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

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

,这称为多对多关联。你也应该考虑如果你需要双向导航性

,我不认为每个类都有你提到的引用的问题——这是多少个域模型与1∶N的关系一起工作。 所以你的班级看起来像这样(C#):

公共类AppUser{
公共字符串电子邮件{get;set;}
公共字符串全名{get;set;}
公共bool活动{get;set;}
公共列表组织{get;set;}//…等等
}
公营班级组织{
公共字符串名称{get;set;}
公共字符串域{get;set;}
公共列表成员{get;set;}/
}

我不认为每个类都有您提到的引用有什么问题-问题在于有多少域模型使用1:n关系

所以你的班级看起来像这样(C#):

公共类AppUser{
公共字符串电子邮件{get;set;}
公共字符串全名{get;set;}
公共bool活动{get;set;}
公共列表组织{get;set;}//…等等
}
公营班级组织{
公共字符串名称{get;set;}
公共字符串域{get;set;}
公共列表成员{get;set;}/
}

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

一个重要的区别是,在大多数现代语言中,对象列表都是按引用的,不是通过。这意味着您可以让成员指向组,而组指向成员。如果您将所有内容都视为一个值,那么您确实会有一个循环引用-每个组都会尝试保留其所有成员的自己的副本,这将尝试保留其所有组的自己的副本,等等。

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

在组织中的成员集中使用AppUser可能是正确的选择

与实体建立双向关系没有什么错,它们只需要一点思考和规划


需要注意的重要一点是,哪个实体控制着这种关系,这样,当您向组织中添加AppUser时,您就不会因为尝试将addOrganization添加到AppUser而陷入无限的添加循环,然后AppUser会尝试将该用户添加到组织中,等等。

为了避免重复,我认为集合可能是选择的数据结构

在组织中的成员集中使用AppUser可能是正确的选择

与实体建立双向关系没有什么错,它们只需要一点思考和规划


需要注意的重要一点是,哪个实体控制了关系,这样当您向组织中添加AppUser时,您不会因为尝试将addOrganization添加到AppUser而陷入无限的添加循环,然后AppUser尝试将该用户添加到组织中,等等。

。,在一个项目中,C类中的类之间的双向依赖性很好,但是在C或C++中不允许(不使用某些技术…)。@ Apple LoDeD217:在C语言中进行交叉汇编引用实际上是可行的,只要双向依赖性是通过从第三汇编中定义的类型的间接链接完成的。在一个项目中,C类中的类之间的双向依赖性很好,但是在C或C++中不允许(不使用某些技术…)。@ Apple LoDeD217:在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
}