繁体   English   中英

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

[英]Repository pattern: Can a repository use other repositories?

假设我有一个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);
    } 
}

我认为处理课程TeacherRepository的任务。 恕我直言,最好在一个单独的课堂上处理这个问题。 对每个班级保持单一责任更好。

更新

但是,如果您绝对想要将此功能添加到TeacherRepository ,则可以在不依赖于CourseRepository情况下执行此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);

我在项目上做了类似的事情,我没有看到你的方法中的问题(并不一定认为它与发布答案的其他人的观点相矛盾)。

如果我有一个聚合根(教师)作为其聚合的一部分引用另一个聚合(课程),我认为该方法是有效的,原因如下:

  1. 每个存储库仍然负责其自己的聚合根的CRUD操作
  2. 仍然可以通过每个存储库的API创建每个聚合的实例
  3. 教师资料库仍然有一个职责(创建教师聚合)。 如果没有教师包含对教学课程的引用,您就无法创建教师。

我没有在这里看到这个问题,虽然我可能会在我正在开展的项目中获得更好的理解!!

JLove

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM