如何在这两个耦合类上应用解耦

时间:2012-05-05 08:04:11

标签: java oop circular-dependency

我有两个班级:

public class CourseModule {

  // attributes...

  List<Course> courses;

  public void addCourse() { ... }
}

public class Course {

  // attributes...

  CourseModule module;
}

Course的属性不足以唯一地标识对象,始终需要课程模块,也用于添加信息。 CourseModule由差异Courses组成。

我不喜欢的是循环依赖,感觉不对。现在我在考虑以下内容,而不是为每个方法添加课程并手动设置CourseModule引用,我可以使用构造函数自动执行此过程:

public Course(...,...,...., CourseModule module) {

   this.module = module;
   module.courses.add(this);
}

但同样,这是另一个巨大的问题:在Brian Goetz Java Concurrency in Practice中说:不要让this引用转义构造函数

那么这里最好的做法是什么?我认为这是一个非常简单的例子,可能会产生一个样本解决方案。

2 个答案:

答案 0 :(得分:0)

你是对的,我会说你当前的设置是Code Smell的一个例子。

您是否可以制作另一个对象CourseInfo来管理您在Course中无法包含的其他课程信息?

public class CourseModule {

    List<Course> courses;

    public void addCourse(Course course) { ... }
}

public class Course {

    CourseInfo info;
}

public class CourseInfo {

    CourseInfo info;
}

答案 1 :(得分:0)

有趣的是,我不得不做类似的事情。请参阅my question here

我在互联网上发现this post几乎与你要做的事情完全重复,也与课程有关!我发现那里指定的解决方案并非100%正确,我的问题的答案需要考虑。