我理解命令和事件之间的区别,但在很多情况下,您最终会在两个基本相同的类之间进行冗余和映射(ThingNameUpdateCommand,ThingNameUpdatedEvent)。对于这些简单的情况,您/您是否也可以将该事件用作命令?人们会将所有命令以及所有事件序列化到商店吗?对我来说似乎有点多余。
答案 0 :(得分:17)
所有这些冗余通常都是出于某种原因,并且您希望避免将这些消息用于两个不同的目的,原因有很多:
最后这些只是数据类,它不像是“硬”代码。有一些方法可以实际避免像code-gen这样的简单场景的某些类型。例如,我知道Greg已经使用XML和XSD转换来创建过去给定域所需的所有类。
我会说很多简单的情况你可能想要质疑这是真的域(即建模行为)还是数据。如果只是数据,请考虑不使用事件源。以下是Udi Dahan关于打破您的域名模型的演讲链接,以便不是所有这些都需要事件源。我现在自己也很符合这种思维方式。
http://skillsmatter.com/podcast/design-architecture/talk-from-udi-dahan
答案 1 :(得分:6)
在完成一些例子,尤其是Greg Young的演讲(http://www.youtube.com/watch?v=JHGkaShoyNs)之后,我得出的结论是命令是多余的。它们只是来自用户的事件,他们按下了那个按钮。您应该以与其他事件完全相同的方式存储它们,因为如果您希望在将来的视图中使用它,那么您将不知道这些数据。您的用户确实添加了,然后从篮子中删除该项目或至少尝试。您稍后可能希望使用此信息在以后提醒用户。