Альтернативы многим-многим отношениям с CQRS - PullRequest
36 голосов
/ 14 октября 2010

Как мы моделируем классические отношения «многие ко многим» с CQRS / DDD?

Я знаю, что реализации и решения DDD и CQRS, как правило, зависят от конкретной области, поэтому может быть сложно найти общий ответ на этот вопрос.

Однако, давайте предположим, что у нас есть знакомые отношения между Книга и Автор . Это классическое отношение «многие ко многим».

Мне кажется наиболее естественным, что Книга и Автор - это две разные Сущности , каждый из которых принадлежит своему собственному Совокупному корню, Таким образом, явное моделирование отношений «многие ко многим» между ними - не тот путь.

Как мы моделируем AddBookCommand? Мы хотим иметь возможность добавить книгу в нашу библиотеку, а также как-то заявить, что определенный Автор написал эту Книгу . Как мы моделируем (и сохраняем) такие отношения?

Ни Книга , ни Автор не кажутся хорошими кандидатами на Объекты значения ...

1 Ответ

36 голосов
/ 14 октября 2010

Предполагая, что оба являются агрегатами, скопируйте все необходимые данные об авторах в агрегат Book после добавления новой книги, чтобы у любых последующих команд было достаточно данных об авторах для работы.Теперь, если агрегату Author требуется информация о книгах, написанных автором, он может «подписаться» на событие NewBookAdded (технически вы можете отправить команду RegisterAsAuthorOfBook агрегату Author в результате события NewBookAdded).Я полагаю, что можно было бы смоделировать это и с другой стороны, но я не настолько близок с доменом автора книги.

Суть в том, что вы не храните многие ко многим, потому что ониМасштаб.Вы должны начать думать о них (агрегатах) как об отправке сообщений друг другу.Более важный вопрос заключается в том, что должно быть последовательным и в какой момент времени оно должно быть последовательным.Неужели мы заботимся о том, чтобы Автор не мгновенно отражал тот факт, что была добавлена ​​новая Книга, автором которой она является?Есть ли какие-либо инварианты, которые Автор хочет применить в отношении книг, которые он / она написал (и наоборот)?

Другая вещь - перестать быть ориентированной на данные и более ориентированной на поведение.Каково поведение Книги и Авторского агрегата?Это скажет, какие данные требуются в какой момент и как они должны быть смоделированы.

http://pastie.org/1220582 для первого удара в совокупности Книги.

...