шаблоны проектирования (шаблон команд), чтобы избежать множественных условий if - PullRequest
0 голосов
/ 16 октября 2019
  1. Это запрос, который был отправлен на сервисный уровень
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;  
    }

}

Теперь у меня есть следующие проблемы:

  1. Как избежать многократных проверок if и повторяющихся нулей

Необходимо использовать шаблон команды и создать метод для передачи параметра, проверить нулевые значения

Для проверки на ноль я подготовил метод:

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

1 Ответ

1 голос
/ 16 октября 2019

Прежде всего, вы вообще не использовали вложенный if в своем вопросе. Вложенный if имеет следующую структуру (т.е. if внутри if), которой у вас нет:

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

Если вы намеревались избавиться от множественных if, вы можете использовать троичный оператор, но вашкод будет выглядеть неуклюжимЕще одна альтернатива if ... else - переключение ... case, но оно не будет соответствовать вашему вопросу. Если вам интересно узнать больше, вы можете проверить некоторые другие альтернативы на baeldung.com/java-replace-if-statements

Второй момент касается повторной проверки null, которую вы не можете избежать, поскольку онаявляется частью вашей логики.

...