我对CQRS和DDD比较陌生,我想知道在域模型中实现投票机制的最佳方法是什么。
在产品上,用户可以upvote / downvote。关于投票有一些域规则,例如。你只能投票一次,无论是向下还是向上投票。
投票和产品都是聚合根。这是最好的方法吗?建议保持聚合较小。将投票添加到产品聚合根将超时使其变得臃肿。
我正在努力解决的问题是当投票是聚合根时删除投票。您需要知道需要删除哪个投票聚合。在命令处理程序中,无法使用productId和userId从存储库中检索投票。 aggregateId作为单个Guid存储在数据库中。
该命令将包含这些字段
我找到了一些可能的解决方案:
最好的方法是什么?
答案 0 :(得分:5)
根据我对您的域名的有限理解,我可以得出结论,有两个有界的上下文Catalog
和Reviews
。在这种情况下,您可以Product
中的Catalog BC
聚合和Product
中的Reviews BC
聚合。
Product
中的Reviews BC
聚合将包含特定产品的所有Vote
实体的列表。 Vote
实体将包含强制执行vote only once
业务不变量所需的所有信息(如IP地址,用户ID等)。两种产品聚合类型(来自两个BC)将共享相同的ID - 如果需要,可以保持它们的同步(例如,当从产品目录中删除产品时,它在评论BC中被标记为不可投票)。