我有一个OperationService和一个PostService,它们处理一些关于操作和帖子的操作和业务逻辑。在数据库级别上,操作与帖子具有一对一的关系。保持这种状态的设计方法是什么?我的服务只返回Dtos。没有具体的数据库实体。例如,它持久化一个带有CreateOperationDto的操作,但在这里应该只有帖子的id。然后我有邮政服务如何返回我一个PostDto,但我不能直接坚持PostDto。希望能帮到别人。
看起来您是基于数据模型而不是用例来划分服务之间的边界的。一种选择是更改它们并允许OperationService保存Posts(甚至为此目的重命名/创建一个名为createoperationservice或CreateOperationUseCase的不同服务)。如果你觉得这个方法很有趣,可以看看这个视频。
另一方面,如果您希望像这样将它们解耦,则可以创建一个公共facade,在同一事务中依次调用这两个服务。像这样:@Component
class OperationFacade {
final OperationService operationService;
final PostService postService;
@Transactional
public void createOperation(CreateOperationDto dto) {
long operationId = operationService.save(dto.operation());
postService.saveAll(dto.posts(), operationId);
}
}