当前位置: 首页 > 知识库问答 >
问题:

Mutiny-基于业务逻辑将Uni和Multi结合起来

常波
2023-03-14

我是反应式编程的新手。请协助在穆特尼实现以下目标。

我有一节DTO课

public class UserAppSessionDto{
    private UserDto user;
    private List<OrgDto>  userOrgs;
    private List<AppDto> userApps;
}

3种服务方式,一种返回Uni,另一种返回Multi。

Uni<UserDto> getUserByOrgUserId(Integer orgUserId);
Multi<AppDto> getUserApps(Integer orgUserId);
Multi<RoleDto> getUserRoles(Integer orgUserId);

我需要编写一个调用上述3个方法的服务方法,应用一些业务验证,将返回值设置为UserAppSessionDto的实例并返回一个Uni

public Uni<UserAppSessionDto> getUserAppSessionDetails(Integer orgUserId)
         {
             UserAppSessionDto user=new UserAppSessionDto();

             //1. call the method Uni<UserDto> getUserByOrgUserId(Integer orgUserId)
             //2. If UserDto (in the returned Uni) is not null, call Multi<AppDto> getUserApps(Integer orgUserId) and Multi<RoleDto> getUserRoles(Integer orgUserId) methods in parallel. 
             //3. Set the return values from the above three methods into user variable
             //4. Return Uni<UserAppSessionDto>

             return Uni.createFrom().item(user);
         }

共有1个答案

邵正雅
2023-03-14

为什么getUserApps和getUserRoles返回Multis?我认为他们不会以流式方式显示结果,而是一批返回列表。如果是这种情况,请使用Uni

通过此更改,您的逻辑变得更加简单:

public Uni<UserAppSessionDto> getUserAppSessionDetails(Integer orgUserId) {
  UserAppSessionDto user=new UserAppSessionDto();

 Uni<UserDto> uni = getUserByOrgUserId(orgUserId)
       .invoke(userDTO -> user.user = userDTO);
 
return uni
   onItem().ifNotNull().transformToUni(userdto -> 
       Uni.combine().all()
         .unis(getUserApps(orgUserId),getUserRoles(orgUserId))
         .asTuple()
         .invoke((apps, roles) -> user....)
     )
     .map(x -> user);
}
 类似资料:
  • 综述 在多功能的动态web应用程序中测试业务逻辑漏洞需要用非常规手段来思考。如果应用认证机制原先以1、2、3的步骤依次执行的验证身份目的来开发,万一用户从步骤1直接跳到步骤3会发生什么?用更加简单的例子来说,在打开失败、权限拒绝或仅仅500的错误的情况下,应用程序是否依然能够提供访问权限? 可以举出许多例子,但是不变的思想是“跳出常规思维”。这种类型的漏洞无法被漏洞扫描工具探测到,依赖于渗透测试人

  • 问题内容: 软件体系结构中的域对象和域服务是什么?我不熟悉它们,或者它们与业务逻辑层有何不同? 问题答案: 不同的人以不同的方式使用这些术语,但这是我的看法: 1)“业务”和“域”大致是同义词。“域”更为通用,因为它不会假设您正在编写业务应用程序。因此,如果我们正在编写科学应用程序或游戏,则可能更喜欢将代码的相关部分称为“域”代码,而不是“业务”代码。因此,在本说明的其余部分中,我将使用“域”,因

  • 1.1  概述 业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。 1.2  Action定义 语法: <action name=" n" global="true" log-enabled="true" procedure=" "> <参

  • 问题内容: 我的应用程序中有两层验证。首先是由bean验证API执行的实体验证(例如,必填字段)。第二层是业务逻辑验证。例如,用户有一个帖子。用户只有自己是该帖子的创建者,并且帖子评级小于50,才能删除该帖子。因此,我必须执行以下操作: 我不喜欢这种方式,因为这种条件被重用,而且我不得不重复代码。此外,如果条件数大于5左右,那么阅读和理解代码就变得不现实。 此外,标准的Spring Validat

  • 我有一个struts项目,我的客户给了我完整的业务逻辑类。他需要这个忘恩负义的人,昂首阔步,冬眠。 哪一种最好,要将业务逻辑放到我的Dao层,需要为业务逻辑添加一个附加的服务层。 一些strut项目我发现动作类直接访问道。 请建议我哪个更好choice.help高度赞赏。 谢谢,

  • 问题内容: 我认为人们普遍认为,作为Java(以及可能带有异常处理的任何语言)中的一条通用规则,应尽量避免使用异常处理来实际处理业务逻辑。通常,如果预期会发生某种情况,则应该检查并更直接地处理它,而不是依靠异常处理为您做检查。例如,以下情况不被认为是好的做法: 相反,延迟初始化应该更像这样完成: 当然,除了简单地处理延迟初始化之外,还可能存在更复杂的逻辑。因此,考虑到这种事情通常是令人生厌的……何