gar*_*arf 3 domain-driven-design scheduled-tasks
我有一个名为Order的实体,以及一个聚合根OrderManager,它根据来自应用程序层的请求更新订单状态和其他一些信息(AppLayer 调用 OrderManager,OrderManager 管理包括订单在内的内部状态)。
每个订单都有到期时间,因此我想安排一个操作来处理到期时间。我不知道该把它放在哪里。我想到两种方法:
我个人更喜欢第一种方法,但也许有人有其他想法?
首先,Order实体应该是Order聚合的聚合根。它应该封装状态更改行为,以便不需要管理器类。然后,应用程序服务将直接委托给Order实体。
至于处理订单到期,必须考虑一些事情。这些都需要坚持吗?换句话说,是否会存在持久保存到数据库但未加载到应用程序中的订单,需要对其过期进行处理?如果是这样,那么您需要实现一个超出应用程序边界的工作流程。实现此目的的一种方法是使用连续运行的后台服务,该服务轮询数据库以查找当前到期的订单。然后,它向处理订单到期事件的handled 发送命令。该处理程序将委托回您的域,最终委托给Order实体上的HandleExpiration方法。订单到期只是一个事件,与任何其他域事件一样处理,而后台服务只是使该事件成为可能的基础设施的一部分。这似乎最适合你的方法#2。