关于如何在 DDD 中使用反应式范式的疑问 - Domain repositories

Doubts on how to use the reactive paradigm with DDD - Domain repositories

我正在从事一个将使用 DDD 方法进行开发的项目,并且由于业务需要,将使用反应式编程方法。

我正在为域建模,在定义存储库时出现了一些疑问。我在通过适配器实现存储库时看到了问题,因为使用反应式编程,所有方法 return Uni 或 Multi(将使用 Mutiny!)。 这是一个问题,因为我在域中引入了与框架的依赖关系,这违反了 DDD 原则。

我在这个论坛上看到了一些帖子(例如:),但我对提出的解决方案没有信心。有没有人能够有效地应对这个挑战?

您可以使用通用类型声明您的域存储库接口:

public interface MyRepositoryOutgoingPort <T> {
  T persist(My my);
}

在响应式(例如 Mongo)实现中,您可以包装结果:

@Repository
public interface MyRepositoryMongoImpl
extends ReactiveMongoRepository<My, UUID>,
    MyRepositoryOutgoingPort<Mono<My>> {

  @Override
  default Mono<My> persist(My my) {
    Mono<My> savedMy = save(my);
    return savedMy;
  }
}