DDD:在哪里持久化非域数据?

DDD: Where persist non domain data?

我的应用程序调用外部计费 api 并收到一个必须发送到第二个外部服务以检查计费确认的外部 ID。外部 ID 仅在那一刻使用,对我的域没有任何意义。哪里最好存放它?

请考虑与外部系统的集成通常由两个对象表示和建模。一个在您的问题域 (PD) 中代表外部系统,另一个在 PD 之外代表到 actual 外部系统的接口。外部通常以所谓的 "System Interaction" (SI) 组织,在许多情况下实际上是由制造商或第 3 方提供的库或接口。

在您的情况下,我会在该 SI 对象中维护外部 ID(如果需要)并让 SI 对象发送一条消息进行确认。

PD 和匹配的 SI 对象通常共享一个 "business" 面向接口,允许独立开发 SI 对象。在工厂根据一些配置信息创建 SI 对象后,PD 间接访问 SI 对象是很常见的。

您想要保留此信息这一事实告诉我,此计费过程是作为一系列异步操作发生的,否则您甚至不需要保留初始计费请求 ID。

您经常会在此类流程的编排背后找到流程管理器或 saga,并且它们通常具有自己的持久状态。这是我存储该信息的地方。