2017-09-24 12 views
0

어떤 학생이든 액세스 할 때 수업을 볼 수 있기를 원하며 수업에 액세스 할 때 학생 목록을 가질 수 있기를 원합니다.첫 번째 객체를 참조하는 객체를 다른 객체 내부에서 참조하고자합니다. 이로 인해 어떤 문제가 발생할 수 있습니까?

예 :

public class ClassRoom { 
public String nome; 
public List<Student> students; 
public ClassRoom(String nome){ 
    this.nome=nome; 
}} 

public class Student { 
public String nome; 
public ClassRoom aClass; 
public Student(String nome, ClassRoom aClass){ 
    this.nome = nome; 
    this.aClass = aClass; 
}} 

public School(){ 
    ClassRoom c1 = new ClassRoom("English 102"); 
    Student s1 = new Student("Anna White", c1); 
    Student s2 = new Student("Beatrix Blue", c1); 
    Student s3 = new Student("Carlos Brown", c1); 
    Student s4 = new Student("Dayana Green", c1); 
    Student s5 = new Student("Elliot Red", c1); 
    Student s6 = new Student("Jefferson Pink", c1); 

    c1.students = new ArrayList<>(); 
    c1.students.add(s1); 
    c1.students.add(s2); 
    c1.students.add(s3); 
    c1.students.add(s4); 
    c1.students.add(s5); 
    c1.students.add(s6); 

    //example 
    System.out.println(
      c1.students.get(1).aClass.students.get(2).aClass.students.get(3).nome 
    ); 

}} 

가 이런 식으로 프로그램을 잘못입니까? 더 좋은 방법이 있습니까?

답변

0

서로 다른 클래스의 상호 참조 객체는 가능한 한 피해야하는 순환 종속성을 만듭니다.

등 긴 컴파일 시간, 낮은 모듈화, 높은 커플 링 등의 순환 종속성을 만드는 단점이 많이 있습니다

0

유일한 부정적인 당신이 제거하면 sync-의 데이터를 유지할 필요가있다 교실 A의 학생 1, 학생 1의 교실 A를 제거해야하거나 데이터가 일치하지 않아야합니다.

실제로이 데이터를 동기화하는 데 사용되는 세 번째 클래스를 권장하므로 한 번의 호출로 두 클래스를 모두 변경할 수 있습니다. 그런 식으로하면 두 번째 수업에 관계를 저장하는 것이 가장 좋지 않을 수도 있지만 외부에 저장하는 것은 좋지 않을 수 있습니다. 예를 들어 세 번째 수업에 참여하는 학생들에게 교실의 Multimap을 제공하는 것이 가장 좋다고 결정할 수 있습니다. 직접 데이터를 보유하는 것이 아니라