2017-11-25 30 views
0

当我的域中的用户注册过程发生几个操作:用户创建(使用电子邮件/密码或与链接的社交网络帐户),用户登录完成。事件源:更详细的拆分事件

我有(见)两个选项如何注册事件:

  • 一个UserRegistred事件(其中包含了所有的信息,密码哈希值,外部社会的账户)
  • 多个事件UserCreatedUserPasswordSetUserExternalAccountLinkedUserLoggedIn

从第二选择活动(UserPasswordSetUserExternalAccountLinkedUserLoggedIn)可能会在执行相应操作时自行显示。

我知道问题和选项可能是主观的,但我希望听到有经验的ES/DDD用户对此问题的意见。

回答

0

我不认为有经验,但我认为这是简单的输出多个事件,而不是一个复杂的简单事件。

的优点是:

  • 简单 - 预测(包括骨料本身)和其他事件处理程序不需要
  • 少流失上理解复杂UserRegistered事件以及细粒度事件事件模式 - 例如如果你改变你的身份验证事件的细节,少的事件类型将需要改变(因为有改变没有UserRegistered事件)
  • 清晰 - 事件更好地反映所涉及的用户注册

我状态变化的序列可以想到一个小骗子:

  • 非原子注册。可能投影可以处理单个用户注册的事件,并可以在客户端可以立即查询的状态下自动创建读取模型。如果您有多个事件,则读取的模型可能会逐个处理它们,这意味着用户可能暂时处于半注册状态,您可能不想在客户端处理。
    • 这可以通过你的读投影避免消耗所有可用的事件,并使其更新在一个事务中,这样的事件序列会导致只有一个事务提交,因此你永远看不到一个半注册用户。这在任何情况下都更为高效,但可能并非如此简单,具体取决于您的阅读商店。
    • 或者,您也可以自动半注册用户查询服务
时过滤掉
相关问题