2016-07-30 49 views
0

验证使用其他型号的事件有哪些选项?使用其他型号进行验证

购物车例如:

当增加一个购物车项目到购物车,应该有一个检查,如果该项目没有卖完呢。

+0

事件采购意义上的事件无法验证,它们已经发生。 – guillaume31

回答

4

您通常会验证一个命令,而不是一个事件作为一个事件应是一种无法改变

在回答问题时,通常要看是什么过程的业务成本。例如,在你的例子中,订购已售罄物品的业务的成本是多少?可能很少 - 一封电子邮件称该商品缺货,估计需要多长时间。

在这种情况下,您可以对数据使用最终一致的读取模型,您可以在此处查询读取模型/缓存的库存水平,但接受某些订单可能会处理缺货的情况。

如果你有更严格的限制,那么你就必须执行它们,最好通过重塑你的集合体,或有交易和/或阻塞订购过程。

1

什么是验证它使用另一种模式的事件的选项?

A domain event从业务的角度来看是一个重要的事情。这是过去发生的事情,所以不能改变。 在OO中,它通常表示为Value Object,也就是说,一个不可变的对象,其中有趣的部分是它们的属性。

通常,这些Domain Events是从Aggregate Root(DDD专业术语)的操作中产生的。 Aggregate Root的客户端是Application Service(aka用例)。 Application Service收到一个Command对象并基于此,执行Aggregate Root中的操作。

的验证可能在于原始验证,对象的验证和/或组成的对象的验证。然后负责执行此验证的对象应该是本身和/或具有验证中的特定目标的一些对象。

当增加一个购物车项目到购物车,应该有一个检查 如果该项目是不卖了没有

按照您的示例对象woulb是:

  • 命令:AddItemToShoppingCartCommand。保存关于要添加的项目的信息,以及例如购物车标识符。
  • 应用服务:AddItemToShoppingCartService
  • 总根:ShoppingCartInventory。我故意在名称中使用Inventory以明确表示此Aggregate Root满足不变量“...如果该项目尚未售罄。“

:在我看来,它检查在Aggregate Root库存不变,使得总太大我的建议是放宽这个不变的拥抱最终一致性,如果这一点。‘售罄’这是没有正常发生