1

我有两节课:

public class CourseModule {

  // attributes...

  List<Course> courses;

  public void addCourse() { ... }
}

public class Course {

  // attributes...

  CourseModule module;
}

的属性Course不足以唯一地标识一个对象,课程模块总是需要的,对于附加信息也是如此。ACourseModule由差异组成Courses

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

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

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

但同样,这里还有另一个大问题:在 Brian Goetz Java Concurrency in Practice 中说:不要让this引用逃脱构造函数

那么这里的最佳实践是什么?我认为这是一个非常简单的例子,它可能会产生一个示例解决方案。

4

2 回答 2

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;
}
于 2012-05-05T08:07:08.947 回答
0

有趣的是,我不得不做类似的事情。在这里查看我的问题

我在互联网上发现这篇文章几乎与您正在尝试做的事情完全相同,包括课程!我发现指定的解决方案并非 100% 正确,需要考虑我的问题的答案。

于 2012-05-05T08:18:19.897 回答