如何最有效地更新 2 个相互依赖的 类 中的数据
How to update data in 2 interdependent classes most efficiently
我已经多次面对这个非常基本的事情,但我一直不知道如何以最有效的方式解决它。
我有一个class'Student'和一个class'Course'。学生应该通过课程列表知道他访问的所有课程,而课程应该通过学生列表知道所有正在访问它的学生。
现在假设我想让学生访问一门新课程,所以我创建了一个 'addCourse(Course course)' 方法来将新课程添加到学生的课程列表中 - 没问题。但我也希望课程知道学生现在正在访问它。所以我为课程 class 创建了一个 'addStudent(Student student)' 方法,并在学生的 'addCourse' 方法中调用它。
问题是:我想让双方都可以更新这些数据——学生和课程,但是如果我将各自的其他方法添加到自己的方法中,我最终会出现堆栈溢出课程。那么我怎样才能最有效地防止这种情况发生呢?
此外,如果我将此数据存储在两个 classes 的对象中,我想我的内存会充满比我需要的更多的数据。有没有办法在不丢失数据访问权限的情况下防止这种情况发生?
您有一个 Student
class,它有一个 AddCourse
方法,可以更新学生访问的课程列表。
您有一个 Course
class,它有一个 AddStudent
方法,可以更新访问课程的学生列表。
在您的计划的其他地方,您决定学生将要访问一门课程。例如,如果学生想加入课程,可能会有一个用户界面可以与之交互。该用户的操作应该触发对某些业务逻辑的调用,该业务逻辑执行将学生添加到课程所需的一切。例如:
function AddStudentToCourse(studentId, courseId)
{
student = GetStudentById(studentId);
student.AddCourse(courseId);
course = GetCourseById(courseId);
course.AddStudent(studentId);
}
这里的重点是,就 Student
而言,它只是维护一个课程 ID 号列表。 Student
class 实际上并没有 做 任何课程;它只是维护列表,以便其他代码稍后可以引用它。
Course
也一样;它只是维护一个学生证号列表。
这种设计的美妙之处在于 Student
和 Course
彼此独立,除了那些 id 列表;这些真的只是数字。
我不会说这是 "the most efficient" 的方法。不过效果确实不错。
我已经多次面对这个非常基本的事情,但我一直不知道如何以最有效的方式解决它。
我有一个class'Student'和一个class'Course'。学生应该通过课程列表知道他访问的所有课程,而课程应该通过学生列表知道所有正在访问它的学生。
现在假设我想让学生访问一门新课程,所以我创建了一个 'addCourse(Course course)' 方法来将新课程添加到学生的课程列表中 - 没问题。但我也希望课程知道学生现在正在访问它。所以我为课程 class 创建了一个 'addStudent(Student student)' 方法,并在学生的 'addCourse' 方法中调用它。
问题是:我想让双方都可以更新这些数据——学生和课程,但是如果我将各自的其他方法添加到自己的方法中,我最终会出现堆栈溢出课程。那么我怎样才能最有效地防止这种情况发生呢?
此外,如果我将此数据存储在两个 classes 的对象中,我想我的内存会充满比我需要的更多的数据。有没有办法在不丢失数据访问权限的情况下防止这种情况发生?
您有一个 Student
class,它有一个 AddCourse
方法,可以更新学生访问的课程列表。
您有一个 Course
class,它有一个 AddStudent
方法,可以更新访问课程的学生列表。
在您的计划的其他地方,您决定学生将要访问一门课程。例如,如果学生想加入课程,可能会有一个用户界面可以与之交互。该用户的操作应该触发对某些业务逻辑的调用,该业务逻辑执行将学生添加到课程所需的一切。例如:
function AddStudentToCourse(studentId, courseId)
{
student = GetStudentById(studentId);
student.AddCourse(courseId);
course = GetCourseById(courseId);
course.AddStudent(studentId);
}
这里的重点是,就 Student
而言,它只是维护一个课程 ID 号列表。 Student
class 实际上并没有 做 任何课程;它只是维护列表,以便其他代码稍后可以引用它。
Course
也一样;它只是维护一个学生证号列表。
这种设计的美妙之处在于 Student
和 Course
彼此独立,除了那些 id 列表;这些真的只是数字。
我不会说这是 "the most efficient" 的方法。不过效果确实不错。