4

我试图弄清楚如何处理登录 CQRS 设置。情况如下:

  • 我有一个基于 Rx 的事件代理。
  • 我有一个项目Foo.Events,其中事件继承自EventArgs(不知道为什么),因此代理希望所有事件都继承自此类。
  • 我有几个子系统(用 DI 初始化)发布到日志中。
  • 我需要几个子系统来处理日志请求并相应地处理它们(在屏幕上显示,发送 xmpp/sms/whatever)

现在,我试图弄清楚如何适应登录。在 CQRS 中,在我看来,日志记录本身并不是一个事件,而是系统对事件的响应。另一方面,日志请求看起来像一个命令,即 CQRS 中的 C。

我很想以某种方式将其放入事件代理中,但我不确定。无论如何,命令是否属于事件代理,我们可以假设代理只是一些不关心它是 C 还是 Q 的消息传递系统吗?

非常感谢您的帮助!

4

2 回答 2

3

日志记录是一个基础设施问题。命令和事件(通常)与业务相关。记录只会在必要时进行,技术实施取决于您。它既不是命令也不是事件。它记录其中之一已经发生。事实上,您甚至可能想要记录某些查询。

您可以将事件存储在事件日志(甚至事件存储)中并将它们用作日志。如果您需要记录命令和/或某些查询,您还可以使用日志处理程序包装您的命令和查询处理程序。

于 2013-07-12T17:09:02.137 回答
2

Logging manifests in different ways in different contexts. In CQRS, the storage of domain events can be regarded as an audit log. You can also have application/infrastructural logging which logs technical system events. These are typically stored in a different place and are mostly write only. On .NET, frameworks such as log4net or NLog are used to handle logging of technical system events. You can create an Rx-based implementation for these frameworks, though that might be adding needless complexity.

Also, you certainly can place log messages on a message queue, though I'm not sure what you'd get out of that. Is the event broker you have an in-process broker or distributed? If the latter, then I'd steer away from that unless absolutely necessary.

于 2013-07-11T21:22:55.597 回答