簡體   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