Здесь краткое описание моего домена:Как смоделировать систему голосования/подобной системы в проекте DDD/CQRS/EventSourced?
У меня есть статья, которая в основном похожа на любую статью (название, резюме и тело).
Мне нужно разрешить голосование по моим статьям, голоса будут поданы анонимными пользователями (регистрация не требуется, но сессия будет хранить голоса, пожалуйста, не сосредотачивайтесь на этом).
В этом домене Article является моим агрегированным корнем.
я не могу найти способ моделирования мои голоса с учетом следующих требований:
голосования может быть либо мне нравится или не нравится, он должен быть изменяемым (оно может быть изменено в течение долгого времени или даже отменен)
Гость, связанный с сеансом связи, может подавать только один голос за статью.
Итак, должен ли Голосовать быть агрегатом самостоятельно?
что-то вроде
Class Vote { public function cast(ArticleId id, GuestSessionToken token, VoteValue value); }
Но в этом случае, как я должен проверить единственность? Используя Eventual Consistency (кажется, хорошо, потому что у меня нет дубликатов, насколько они редки).
Потому что, если я добавлю метод голосования в свою совокупность статей, мне придется переиздавать историю для каждого голоса, которое будет исполнено, что звучит довольно медленно (учитывая факт, что я могу иметь 100 тысяч голосов за статьи).
Я знаю, что производительность и оптимизация не должны учитываться при разработке способа DDD, но здесь это конкретная проблема, которую мне нужно решить до того, чтобы что-то реализовать.
Любое из вас уже что-то подобное делало раньше?
Я ответил на аналогичный вопрос здесь: http://stackoverflow.com/a/38259448/225022 – Bishoy