领域事件应该根据事件类,还是类和主题来分派?
例如,我有以下事件:
class UserRegisteredEvent implements INonTransactionalEvent{
public Timestamp: TTimestamp;
}
还有一个活动经理,
class EventManager {
/** Omitted **/
}
Udi Dahan提出事件是一流的对象,我喜欢这样。有一个 UserRegisteredEvent对象,一个 OrderComplete对象。我的问题是,类型本身是否绑定到事件处理程序?例如,我应该只将事件对象传递给发布方法吗?
EventManager.Publish(new UserRegisteredEvent(1));
这意味着每个处理程序都绑定到一个类类型,这似乎是有限的。虽然 YAGNI 可能是真的,但以下内容是否更强大:
EventManager.Publish(new UserRegisteredEvent(1), Events.UserRegistered)
其中事件主题是处理程序绑定的内容。这样,处理程序可以从继承中受益。如果类型安全或通用语言的使用是一个问题,可以这样做:
EventManager.UserRegisteredEvent(1)
这只是较长发布版本的一种简短方法。这让我有点恼火,因为这意味着必须为每个新事件更改类,这似乎是不必要的(实际上,如果使用上述方法,则没有必要)。
虽然我只看到事件作为没有主题的类发布,但这是限制性的,还是有人遇到过这个问题?