Прочитав этот вопрос и ответы на него, а также некоторые другие ресурсы, я думаю, что мое приложение имеет 3 совокупных корня и поэтому должно иметь 3 соответствующих репозитория, но я не уверен, какими должны быть репозитории.используется, когда мне нужно получить данные, являющиеся одним из других агрегатных корней.
Посмотрим на пример.Представьте себе более простую версию переполнения стека, в которой есть понятия «пользователи», «теги» и «вопросы».На мой взгляд, это все агрегатные корни, потому что нам нужно составить список и запросить их, и поэтому каждый из них должен иметь свой собственный репозиторий.
Учитывая ситуацию, когда вы просматриваете профиль пользователя и также хотитеотобразить все вопросы, отправленные пользователем, если вы используете QuestionsRepository
из UsersRepository
для заполнения массива user.Questions
?
Я считаю, что этот вопрос болеевопрос разделения интересов , но это касается вопроса о том, как репозитории должны взаимодействовать.На мой взгляд, очень просто создавать циклические ссылки между репозиториями.
Например, UsersRepository
выбирает все вопросы пользователей из QuestionsRepositiory
, который для каждого вопроса выбирает пользовательские данные, используя экземпляр UsersRepository.и т. д.
Теперь давайте возьмем обратное (которое я только что немного коснулся).Чтобы перечислить все вопросы, мы будем использовать QuestionsRepository
и вызывать метод GetAll()
(или аналогичный).В этом листинге мы хотим отобразить информацию о пользователе, поэтому нам нужно извлечь ее из базы данных.
В идеале в этой ситуации мы хотели бы выполнить объединение вопросов с пользователями, а не получать все вопросы.и итерируя по ним, выбирая пользователя каждый раз, давая нам ситуацию N + 1 и массу ненужных поездок в базу данных.
Разрешено ли QuestionsRespository
создавать экземпляр Users
для выполненияприсоединиться? или нужно использовать UsersRepository
, предотвращая одноразовое посещение базы данных.
Очевидным последствием этого является то, что вам дается тег и вам необходимо отобразить все Вопросы и их пользователей. Должен ли TagsRepository
использовать QuestionsRespository
для получения всех вопросов, где tag LIKE 'tag-name'
, который, в свою очередь, использует UsersRepository
для получения информации о пользователе для каждого вопроса? или TagsRepository
разрешено создавать Questions
и Users
для заполнения графа объектов?