关于如何在 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;
}
}
我正在从事一个将使用 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;
}
}