存储库模式:一个存储库可以使用其他存储库吗?

Chu*_*ski 5 java repository-pattern

假设我有一个 TeacherRepository,它需要根据下面的代码使用 CourseRepository。教师和课程形成多对多的关系。教师和课程不形成聚合。你会认为这种模式的正确使用吗?

class TeacherRepository {

    @Inject(@Named("courseRepository"))
    private final CourseRepository courseRepository;

    public void addCourseToTeachers(String courseName) {

      Course course = courseRepository.findByName(courseName);

      for (Teacher teacher : readAll()) 
        teacher.addCourse(course);
    } 
}
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 6

我不认为TeacherRepository处理课程是 的任务。恕我直言,最好在单独的课程中处理这个问题。最好为每个类保持单一职责。

更新

但是,如果您绝对想将此功能添加到TeacherRepository,则可以在不依赖于 的情况下进行CourseRepository

class TeacherRepository {
  public void addCourseToTeachers(Course course) {

    for (Teacher teacher : readAll()) 
      teacher.addCourse(course);
  } 
}

...
CourseRepository courseRepository = ...;
TeacherRepository teacherRepository = ...;
...
Course course = courseRepository.findByName(courseName);

if (course != null)
  teacherRepository.addCourseToTeachers(course);
Run Code Online (Sandbox Code Playgroud)

  • @Chance,如果您绝对 100% 确定客户端永远不需要直接与课程存储库进行交互,那么将其封装在教师存储库中可能没问题(尽管如此,我还是更喜欢单独的帮助类这样,每个班级都有一个责任)。然而,在现实生活中,总会有新的需求很容易打破这种限制。就在我的脑海里:当你还不知道给它分配哪些老师的时候,你会如何创建一门新课程? (2认同)