如何最有效地更新2个相互依赖的类中的数据

时间:2015-12-21 12:13:03

标签: memory optimization data-structures redundancy

我现在多次面对这个非常基本的事情,但我从来不知道如何以最有效的方式解决它。

我有一个班级'学生'和课程'课程'。学生应该通过一系列课程了解他所访问的所有课程,课程应该通过学生名单了解所有正在访问的学生。

现在让我们说我希望学生参加一门新课程,所以我创建了一个“添加课程”(课程课程)'在学生的课程列表中添加新课程的方法 - 没问题。但我也希望课程能够了解学生现在正在访问它。所以我创建了一个“addStudent(学生)”#39;课程类的方法,并在学生的addCourse'方法

问题是:我想从双方 - 学生和课程中进行这些数据更新,但如果我将相应的其他方法添加到自己的方法中,我当然会陷入堆栈溢出。那么我怎样才能最有效地防止这种情况呢?

此外,如果我将这些数据存储在两个类的对象中,我想我会用更多的数据来填充我的内存。有没有办法在不丢失数据访问权限的情况下防止这种情况发生?

1 个答案:

答案 0 :(得分:0)

您的Student课程有AddCourse方法,可以更新学生访问的课程列表。

您的Course课程有AddStudent方法,可以更新正在访问该课程的学生列表。

在您的计划中

其他地方,您决定学生将要去参加课程。例如,如果他想加入课程,则可能存在学生与之交互的用户界面。该用户的操作应该触发对某些业务逻辑的调用,该逻辑执行将学生添加到课程所需的所有内容。例如:

function AddStudentToCourse(studentId, courseId)
{
    student = GetStudentById(studentId);
    student.AddCourse(courseId);
    course = GetCourseById(courseId);
    course.AddStudent(studentId);
}

这里的要点是,就Student而言,它只是维护一个课程ID号码列表。 Student课程实际上并没有任何课程;它只是维护列表,以便其他一些代码可以在以后引用它。

Course相同;它只保留一份学生身份证号码。

这种设计的美妙之处在于StudentCourse彼此独立,除了那些ID列表;那些只是数字。

我不会说这是最有效的"这样做的方式。但它确实运作良好。