ドメイン イベントは、イベント クラス、またはクラスとトピックに従ってディスパッチする必要がありますか?
たとえば、次のイベントがあります。
class UserRegisteredEvent implements INonTransactionalEvent{
public Timestamp: TTimestamp;
}
そしてイベントマネージャー、
class EventManager {
/** Omitted **/
}
Udi Dahanは、イベントはファースト クラス オブジェクトであると提案していますが、私はそれが気に入っています。UserRegisteredEventオブジェクト、 OrderCompleteオブジェクトがあります。私の質問は、型自体がイベント ハンドラーにバインドされるかどうかです。たとえば、イベント オブジェクトを publish メソッドに渡すだけでよいでしょうか?
EventManager.Publish(new UserRegisteredEvent(1));
これは、各ハンドラーが 1 つのクラス タイプにバインドされていることを意味し、制限があるようです。YAGNI は正しいかもしれませんが、以下はより強力ではありません。
EventManager.Publish(new UserRegisteredEvent(1), Events.UserRegistered)
これにより、イベントトピックがハンドラーのバインド先になります。このようにして、ハンドラーは継承の恩恵を受けることができます。型の安全性またはユビキタス言語の使用が問題である場合、次のことができます。
EventManager.UserRegisteredEvent(1)
これは、より長い公開バージョンへの簡単な方法です。これは、新しいイベントごとにクラスを変更する必要があることを意味するため、少し面倒です。これは不要に思えます (実際、上記の方法を使用する場合は必要ありません)。
イベントがトピックのないクラスとして公開されるのを見たことがありますが、これは制限ですか、それともこれで問題が発生した人はいますか?