应该将事件对象命名为过去时动词还是名词?

awr*_*t18 5 events naming-conventions event-sourcing

我一直在阅读几个活动采购文章和例子.我似乎有些是动词,而其他人则称为名词,两者都可能在最后添加了事件.哪个更正确?一个例子是.OrderShippedEvent(有时只是OrderShipped)与ShipOrderEvent.对这些类型的对象进行操作的方法的时态也没有多大帮助.以下是我发现的一些例子.

process(OrderShippedEvent);
Run Code Online (Sandbox Code Playgroud)

要么

apply(ShipOrderEvent);
Run Code Online (Sandbox Code Playgroud)

在其他情况下会有像

HandleOrderShipped(OrderShippedEvent)
Run Code Online (Sandbox Code Playgroud)

要么

HandleShipOrder(ShipOrderEvent)
Run Code Online (Sandbox Code Playgroud)

我假设应该有一种标准方法来命名和处理任何上下文中的任何类型的事件,尽管我最感兴趣的是Event Sourcing场景.

Ces*_*Gon 6

嗯,它们意味着不同的东西:

  • ShipOrderEvent意味着即将发出订单,但我们无法确定它是否已经发货.
  • OrderShippedEvent意味着订单已经发货,当然.

它们对.NET中System.Windows.Forms.Form类的FormClosing/FormClosed事件很熟悉.因此,我建议您不要建议使用什么名称,而是建议您考虑您希望通过事件代表什么,并相应地命名.


leo*_*eon 5

事件通常定义某件事已经发生已经被触发,并在触发发送消息。我勇敢地站在中间保留过去式动词的选项之外。当然,有些语言对于命名约定有特定的最佳实践 - 有些有 onEventName,有些使用现在发生的操作(Button.Click)。至于在名称上附加“事件”一词,嗯,我不习惯 - 但据我所知,命名约定的存在是为了摆脱神奇的变量(通过查看它们,你无法掌握至少它的数据是什么或它为何存在),因此这同样适用于方法和事件 - 例如名为 DoSomething() 的方法和名为 Thing 的事件。人们可以理解它们,但这需要一种更具冒险精神的灵魂去解析代码,以将超级好的命名变量/方法/函数正确地放置在一些人类可理解的流程中。