java - 设计模式(命令模式),以避免出现多个if条件

标签 java spring-boot design-patterns null command-pattern

这是已发送到服务层的请求


public class UserRequest {

    private String id;
    private String link;
    private String searchText;
}



为“用户响应创建者”创建的类->具有不同的转换


@Component
public class UserResponseCreator {
    @Autowired
    private UserInfoServiceClient userInfoServiceClient;

    public List<UserResponse> getUserResponse() {
    //transformation one
    }

    public List<UserResponse> getUserResponse(UserRequest request) {
    //transformation two
    }
}



服务类别:


@Service
public class UserService {
@Autowired
    private UserResponseCreator UserResponseCreator;

    public List<UserResponse> sendEntries(UserRequest request) {

        String node = request.getnode();
        String link = request.getLinkedTo();
        String searchText = request.getSearchText();

        List<UserResponse> UserResponses = new ArrayList<>(); 

        if ( node == null && link == null && searchText == null ) {
            UserResponses = UserResponseCreator.getUserResponse();

        } else if (node != null && link != null) {
                UserResponses = UserResponseCreator.getUserResponse(request);

        } else if (searchText!=null) { 
            UserResponses = UserResponseCreator.getUserResponse();
        } else {
            throw new InvalidRequestBodyException("Please check the request body");
        }

        return UserResponses;  
    }

}


现在我有以下问题:


如何避免多次if和重复的null检查


必须使用命令模式并创建方法来传递参数,检查空值

对于null检查,我准备了一种方法:

public boolean checkFieldsIsNull(Object... varArgs) {
        return Stream.of(varArgs)
                .allMatch(Objects::isNull);
    }

最佳答案

首先,您根本没有在问题中使用嵌套的if。您没有的嵌套if具有以下结构(即if中的if):

if (condition1) 
{
   // Executes when condition1 is true
   if (condition2) 
   {
      // Executes when condition2 is true
   }
}


如果您打算摆脱多个if,则可以使用三元运算符,但是您的代码看起来很笨拙。 if ... else的另一种选择是switch ... case,但它不适合您的问题。如果您有兴趣探索更多内容,可以在baeldung.com/java-replace-if-statements上查看其他选择。

第二件事是关于重复的null检查,您无法避免,因为这是您逻辑的一部分。

关于java - 设计模式(命令模式),以避免出现多个if条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58418038/

相关文章:

java - spring 中的事务注解——它是如何工作的?

java - kotlin的哪个功能可以用来替代通过java代理进行方法拦截

java - Spring data jpa 按嵌套对象集合大小排序

spring-boot - Gradle bootRun 失败?

java - 如何为我的 Java 应用程序创建一个类似于 Netbeans 起始页的起始页?

java - 目前没有活跃的交易

spring - Spring MVC 和 Spring Boot 的区别

design-patterns - 传递部分完整的构建器实例

javascript - 如何临时从/向对象借用/添加功能?任何设计模式?

调用另一个 REST API 的 REST API