2

我有一个名为Order的实体,以及一个聚合根OrderManager,它根据来自应用层的请求更新订单状态和一些其他信息(AppLayer 调用 OrderManager,OrderManager 管理包括订单在内的内部状态)。

每个订单都有到期时间,所以我想安排一个操作来处​​理到期。我不知道该放在哪里。我想到了两种方法:

  1. 在域模型中定义一个接口 IScheduler。所以 OrderManager 使用这个接口来进行任务调度。
  2. 不要定义接口,而是在应用程序级别安排过期处理。这意味着应用层调用了一些方法,比如 OrderManager.HandleExpiration

我个人更喜欢第一种方法,但也许有人有其他想法?

4

1 回答 1

2

首先,Order实体应该是Order聚合的聚合根。它应该封装状态改变行为,这样就不需要管理器类。然后,应用程序服务将直接委托给Order实体。

至于处理订单到期,必须考虑一些事情。这些都需要坚持吗?换句话说,是否会有订单被持久化到数据库中并且没有加载到应用程序中,需要处理哪些过期?如果是这样,那么您需要实现一个超出应用程序边界的工作流。一种方法是使用一个持续运行的后台服务来轮询数据库以获取在当前时间到期的订单。然后它向处理订单到期事件的handled 发送一个命令。此处理程序将委托回您的域,最终委托给Order上的HandleExpiration方法实体。订单到期只是一个事件,像任何其他域事件一样处理,后台服务只是使该事件成为可能的基础设施的一部分。这似乎最适合您的方法#2。

于 2013-02-13T18:24:27.990 回答