我正在将 CQRS 用于我正在构建的应用程序(具有复杂业务逻辑的在线讨论系统),并且我在实现中遇到了让我担心的部分。
我应该如何处理综合浏览量?如果用户查看线程,我想跟踪它。因为我想跟踪它,所以我应该创建一个命令和一个事件,并将其绑定到负责我正在查看的对象的聚合根(例如,分别为 UserViewsThread 和 UserViewedThread)。但这似乎效率很低——除此之外,没有理由在讨论系统的许多用例(查看论坛/线程)中找到聚合根。现在我正在介绍这个,我将在页面的每个视图上都有一个额外的命令调度和事件发布,这反过来又负责“后台处理”线程聚合,序列化我的事件,并将其发送到我的事件出版商。
必须有更好的方法来做到这一点。我正在考虑也许让我的控制器对象能够调度事件 - 但是通过绕过我的聚合,我不能再将行为附加到页面浏览量。
另一种可能性是使用它作为验证我的用户的方式的想法。将允许 UserViewsThread 和 UserViewsForum 命令引发身份验证异常,让我的控制器知道用户无法执行此操作。但是,如果这些被翻译成事件,并存储在我的事件存储中,我们谈论的是在每个页面视图上创建的多个事件- 这很可能会破坏性能(每个页面视图都会导致数据库事务......呃)和资源管理。
你男朋友的想法是什么?