gpt4 book ai didi

domain-driven-design - DDD中的定时任务

转载 作者:行者123 更新时间:2023-12-05 04:18:26 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

关于domain-driven-design - DDD中的定时任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14857053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com