WebHooks 如何映射到 DDD 中的域服务?

How do WebHooks maps to a domain service in DDD?

我对网络挂钩及其如何映射到域驱动事件有疑问。

我正在使用域驱动设计对系统进行建模。无需赘述,有一个域服务(机器学习预测)需要一些时间才能 运行。因此,用户希望以异步方式发送“批次”。在高层次上,我有一个 REST API(一个控制器),它向我的应用程序(用例)发送命令,它操纵我的域模型。

在建模方面,我将预测和批处理的完成视为 领域事件。在 API 方面,我正在考虑 a "subscriber" pattern,其中 API 用户可以注册一个端点并选择她想要接收的事件。例如,她可以只订阅“批量完成”事件,或者同时订阅“预测完成”和“批量完成”。

我的问题是 subscription/subscriber 的概念是否应该成为我的领域模型的一部分。换句话说,我应该在哪里存储与订阅者关联的“端点”?在域模型中还是在API级存储中?

一方面,我觉得它不属于我的领域,因为它是一个技术问题,只与我有关 REST/HTTP API。不同的 API(例如同步 gRPC)不会有该信息。将其存储到“api级”存储中有意义吗?另一方面,同样的论点适用于用户电子邮件,我可以将其视为电子邮件协议标识符(我仍然直接将其放入我的域模型中)。

我这是在吹毛求疵吗?有没有“通用”的方法来做到这一点?

非常感谢:-)

弗兰克

不,我会把它分开 - webhook 对我来说是一个 presentation/hosting 问题。

无论是事件总线,还是通过 webhook 或 gRPC 发送事件流的代理,它最终都是相同的异步流,只是 presented/implemented 方式不同。

PredictionCompleted 等事件很有意义,并允许您的 API 以异步方式建模,您似乎走在正确的道路上。

然后事件处理程序可以选择此事件并通过各种通知方法进行分派,您可以为每个通知方法分配一个...电子邮件、gRPC、eventbus、discord 等。这些处理程序中的每一个都需要某种形式的本地映射在该表示层中,以便可以通知订阅者。

我会使用调解器模式(.net 中的 mediatr),然后为每个调解器设置处理程序(如果在同一进程中)。如果您将其扩展到多个进程,那么让所有这些事件处理程序挂起一个事件总线是有意义的,然后在从总线接收到事件时触发它们各自的转换器(即 post 到不和谐),甚至 post 到另一个外部订阅消息总线。