我现在多次面对这个非常基本的事情,但我从来不知道如何以最有效的方式解决它。
我有一个班级'学生'和课程'课程'。学生应该通过一系列课程了解他所访问的所有课程,课程应该通过学生名单了解所有正在访问的学生。
现在让我们说我希望学生参加一门新课程,所以我创建了一个“添加课程”(课程课程)'在学生的课程列表中添加新课程的方法 - 没问题。但我也希望课程能够了解学生现在正在访问它。所以我创建了一个“addStudent(学生)”#39;课程类的方法,并在学生的addCourse'方法
问题是:我想从双方 - 学生和课程中进行这些数据更新,但如果我将相应的其他方法添加到自己的方法中,我当然会陷入堆栈溢出。那么我怎样才能最有效地防止这种情况呢?
此外,如果我将这些数据存储在两个类的对象中,我想我会用更多的数据来填充我的内存。有没有办法在不丢失数据访问权限的情况下防止这种情况发生?
答案 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
相同;它只保留一份学生身份证号码。
这种设计的美妙之处在于Student
和Course
彼此独立,除了那些ID列表;那些只是数字。
我不会说这是最有效的"这样做的方式。但它确实运作良好。