Шаблон репозитория: может ли репозиторий использовать другие репозитории? - PullRequest
3 голосов
/ 15 февраля 2011

Предположим, у меня есть 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);
    } 
}

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Я не думаю, что задача 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);
0 голосов
/ 18 апреля 2013

Я делаю что-то похожее в проекте и не вижу проблемы в вашем подходе (и не обязательно верю, что это противоречит взглядам других, которые разместили ответы).

Если у меня есть один агрегатный корень (учитель), который как часть его агрегата ссылается на другой агрегат (курс), я думаю, что подход действителен по следующим причинам:

  1. Каждый репозиторий по-прежнему отвечает за операции CRUD своего собственного совокупного корня
  2. Все еще возможно создавать экземпляры каждого Агрегата через API каждого репозитория.
  3. Репозиторий Учителя по-прежнему несет одну ответственность (за создание совокупности Учителей). Просто бывает, что вы не можете создать Учителя без Учителя, содержащего ссылку на преподаваемые курсы.

Я не вижу здесь проблемы, хотя могу лучше понять, как разворачивается проект, над которым я работаю !!.

JLove

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...