【发布时间】:2011-07-13 14:01:25
【问题描述】:
我了解命令和事件之间的区别,但在很多情况下,您最终会在两个基本相同的类(ThingNameUpdateCommand、ThingNameUpdatedEvent)之间产生冗余和映射。对于这些简单的情况,您/您是否也可以将事件用作命令?人们是否将所有命令和所有事件都序列化到存储中?对我来说似乎有点多余。
【问题讨论】:
标签: cqrs event-sourcing
我了解命令和事件之间的区别,但在很多情况下,您最终会在两个基本相同的类(ThingNameUpdateCommand、ThingNameUpdatedEvent)之间产生冗余和映射。对于这些简单的情况,您/您是否也可以将事件用作命令?人们是否将所有命令和所有事件都序列化到存储中?对我来说似乎有点多余。
【问题讨论】:
标签: cqrs event-sourcing
所有这种冗余通常是有原因的,出于多种原因,您希望避免将同一消息用于两种不同的目的:
最后,这些只是数据类,而不是“硬”代码。对于像代码生成这样的简单场景,有一些方法可以实际避免一些打字。例如,我知道 Greg 过去曾使用 XML 和 XSD 转换来创建给定域所需的所有类。
我想说,对于很多简单的案例,您可能想质疑这是否真的是领域(即建模行为)或只是数据。如果只是数据,请考虑在此处不使用事件溯源。下面是 Udi Dahan 的演讲链接,该演讲关于分解您的领域模型,以便并非所有这些都需要事件溯源。我自己现在有点符合这种思维方式。
http://skillsmatter.com/podcast/design-architecture/talk-from-udi-dahan
【讨论】:
在研究了一些示例,尤其是 Greg Young 的演示文稿 (http://www.youtube.com/watch?v=JHGkaShoyNs) 之后,我得出的结论是命令是多余的。它们只是来自您的用户的事件,他们确实按下了该按钮。您应该以与其他事件完全相同的方式存储这些数据,因为它是您不知道是否要在将来的视图中使用它的数据。您的用户确实添加了该项目,然后从篮子中删除了该项目,或者至少尝试这样做。您以后可能希望使用此信息来提醒用户这一点。
【讨论】: