UserRegisteredEvent 与 RegisteredUserEvent 命名

UserRegisteredEvent vs RegisteredUserEvent naming

我们公司开始使用领域驱动设计,我想知道如何命名事件。

我在犹豫:

UserRegisteredEvent 我在网上找到的似乎是正确的。

但我想知道如果主题不是像使用 TextMessage 那样执行操作的人:

=> 这方面的最佳做法是什么? => 我应该区分 UserRegisteredEvent(用户自己注册)和 RegisteredUserEvent(有人注册了新用户)吗?

谢谢!

事件是过去发生的一件有趣的事情,所以你用过去时的句子来命名它。在您的示例中:

用户已注册

TextMessageWasSent

要缩写名称,您可以省略“was”。但是“已注册”不是形容词。

在与业务利益相关者密切合作时(这是利用 domain-driven-design 的主要支柱之一),命名部分在大多数情况下都非常明显。业务人员已经知道如何命名系统的哪个部分发生了什么。

系统的哪一部分会给你涉及的实体(或对象)的名称,而发生了什么会给你你是过去时的动词。

在为源代码中的域事件命名时,我们提供了一些可读的事件摘要,使其可以从业务角度快速识别为相应的事件。

您在问题中查看了两种不同的命名模式:

  • Schema A: 开头的过去式动词
    • 注册用户
    • SentTextMessage
    • 已发货订单
    • DeliveredParcel
  • Schema B: 末尾的过去式动词
    • 用户注册
    • TextMessageSent
    • 订单已发货
    • 包裹已送达

附加...Event后缀(例如UserRegisteredEvent)当然有效是否附加后缀几乎总是根据我一直与之合作的团队的偏好来决定的。

在谈论域事件时,您还必须考虑域命令。对于域命令,您还可以添加 ...Command 后缀。该命令表示告诉您该做什么的命令,其中涉及一些实体(或对象)和一些以命令形式表示的描述动词。

例如:

  • 发货单
  • 注册用户
  • 发送文本消息

因此,让我们再次查看您问题中的以下事件名称,作为示例,使用开头带有 过去式动词的模式(模式 A) :

  • RegisteredUserEvent: because adjectives are supposed to come first in English

  • a TextMessage was sent => SentTextMessageEvent

在我应用 domain-driven 设计的所有情况下,我们同意使用其他模式,其中 过去式动词位于末尾(模式 B)这就是为什么:

事件的名称应该很容易识别,而且 - 这对我来说也很重要 - 即使不使用命令也能与命令区分开来...事件...命令 后缀。

我作为一个 reader 在查看以下使用 模式 A 的命令和事件示例时遇到了困难:

  • SentTextMessage(事件)与 SendTextMessage(命令)
  • RegisteredUser(事件)与 RegisterUser(命令)

但是当我使用其他形式的事件命名时 (schema B),对于所有相关人员来说,无论是在绘图、书面架构文档、源代码中,都会变得容易得多等,例如:

  • TextMessageSent(事件)与 SendTextMessage(命令)
  • UserRegistered(事件)与 RegisterUser(命令)