有关事件的一点疑问
事件被领域模型发布
看到最多的例子就是一个类,比如 User 类
|
不解的是
为什么非得通过 User.ChangeName 来发布事件到总线
然后事件被总线推送到User来,才会去执行OnChangeName
常说事件的都是过去式的,而此时事件并未真正的执行过
按照我的理解,如果事件是过去式的,那么应该在User.ChangeName,改变User的状态后,才会去发布ChangedUserName事件才对呀!
事件被领域模型发布
看到最多的例子就是一个类,比如 User 类
|
不解的是
为什么非得通过 User.ChangeName 来发布事件到总线
然后事件被总线推送到User来,才会去执行OnChangeName
常说事件的都是过去式的,而此时事件并未真正的执行过
按照我的理解,如果事件是过去式的,那么应该在User.ChangeName,改变User的状态后,才会去发布ChangedUserName事件才对呀!
有答案了,只是被“看起来”的外观迷惑了
我想听听你的看法 ...
状态写成过去式比较容易理解,事件搞成过去式,可能还是静态思维导致,如果把事件看出正在发生函数动作,就不应该是过去式,而应该是正在发生的事件。
对事件进行溯源也就是Event sourcing,那么需要把事件当成数据,这时事件实际就是状态的代名词,使用过去式比较让人理解。所以,如果你需要对事件进行溯源,可以取过去式,在动词后面加一个ed表示完成了。其实这个事件是否真正完成,必须有一定状态来表示。
事件发生有发生端和接受端,事件发生一般是由UI命令引起的,在一个领域分层结构中,事件发生端可能在Application层,然后激活领域层的领域对象,领域对象再分发到总线指挥各种基础设施,这是一种CQRS+Event Sourcing架构,如下图:
[该贴被banq于2012-12-02 17:12修改过]
之前我以为事件只能由领域对象来触发,然后又由领域对象来监听。当时还在想,这样做有多麻烦
按照您说的,事件有发生端,和接收端。
那也就是意味着,一般事件基本都是由
UI->Command->Command Handler->调用领域对象,进行业务->领域对象发布事件->Event Bus->分发给其它监听者
是这样么