我了解命令和事件的区别,但在许多情况下,您最终会遇到冗余和两个基本相同的类之间的映射(ThingNameUpdateCommand,ThingNameUpdatedEvent)。 对于这些简单的情况,您是否可以/是否使用事件作为命令? 人们是否将所有命令和所有事件序列化到存储中? 对我来说似乎有点冗余。
我了解命令和事件的区别,但在许多情况下,您最终会遇到冗余和两个基本相同的类之间的映射(ThingNameUpdateCommand,ThingNameUpdatedEvent)。 对于这些简单的情况,您是否可以/是否使用事件作为命令? 人们是否将所有命令和所有事件序列化到存储中? 对我来说似乎有点冗余。
通常情况下,这种冗余是有原因的,你会想避免出现以下几种情况:
最终这些只是数据类,这不像是“困难”的代码。 对于一些简单的场景,例如代码生成,有方法可以避免一些打字错误。例如,我知道Greg以前使用XML和XSD转换来创建给定领域所需的所有类。
我认为对于很多简单的情况,你可能要质疑这是否真的是领域(即建模行为)还是数据。如果只是数据,可以考虑不要在这里使用事件溯源。下面是Udi Dahan关于如何拆分域模型的演讲链接,这样就不需要对所有内容进行事件溯源编程了。我现在也比较赞同这种思路。
http://skillsmatter.com/podcast/design-architecture/talk-from-udi-dahan
通过一些实例和特别是 Greg Young 的演示(http://www.youtube.com/watch?v=JHGkaShoyNs),我得出结论:命令是多余的。它们只是来自用户的事件,他们按了那个按钮。您应该以与其他事件完全相同的方式存储它们,因为这是您不知道将来是否需要在视图中使用的数据。您的用户确实将该项添加,然后稍后从篮子中删除,或者至少尝试删除。您可能会在以后想要使用此信息来在以后提醒用户。