Я создаю клон StackOverflow, используя event-sourcing. MVP проста:Event-Sourcing: совокупные корни и производительность
- Пользователи могут создавать вопрос
- Пользователи могут ответить на вопрос
- Пользователи могут upvote и downvote ответы на незамкнутых вопросы
Я моделировал вопрос как совокупный корень. Вопрос может иметь ноль или более ответов, и ответ может иметь ноль или более приоритетов и downvotes.
Это приводит к серьезной проблеме с производительностью. Чтобы ответить на вопрос, должен быть загружен вопрос (являющийся совокупным корнем), который требует загрузки всех его ответов. В DDD, не связанный с событиями, я бы использовал ленивую загрузку для решения этой проблемы. Но ленивая загрузка в event-sourcing нетривиальна (http://docs.geteventstore.com/introduction/event-sourcing-basics/)
Правильно ли моделировать вопрос как совокупный корень?
Vernon, похоже, предполагает, что это должно быть несколько агрегатов, чтобы избежать проблем с параллелизмом: http://ptgmedia.pearsoncmg.com/images/9780321834577/samplepages/0321834577.pdf – MattTannahill
Нет, вы не моделировали совокупный корень. Вы «смоделировали» модель структуры данных/представления и назвали ее «совокупным корнем». У соответствующего DDD нет этой проблемы, и это одна из самых распространенных ошибок DDD. Ваша модель просто неверна, вам нужно попробовать еще раз определить агрегаты и их правила согласованности. Btw, как правило, CQRS является ответом на производительность, но в этом случае модель по-прежнему ошибочна, независимо от cqrs. – MikeSW
Спасибо за отзыв. Я нашел этот пример Vaughn Vernon, который был очень полезен: https://github.com/VaughnVernon/IDDD_Samples/tree/05d95572f2ad6b85357b216d7d617b27359a360d/iddd_collaboration/src/main – MattTannahill