Варианты отрефакторить код, избавиться от if else и возможно сделать код универсальным

Всем привет достался в работу следующий код:

@GetMapping
public List<?> search (@RequestParam(name = "search") String search){
    if (search.contains(":")) {
        String[] strings = search.split(":");
        boolean isNumbers = strings[1].chars().allMatch(Character::isDigit);
        if(strings[0].equals("user") && isNumbers){
                Long id = Long.parseLong(strings[1]);
                if(userService.existsById(id)) {
                    return searchDto.getQuestionsByUserId(id);
                } else {
                    return searchDto.getQuestionsSortedByVotes();
                }
        } else if(strings[0].equals("answers") && isNumbers){
                return searchDto.getQuestionsByNumberOfAnswers(Long.parseLong(strings[1]));

        } else if(strings[0].equals("votes") && isNumbers){
                return searchDto.getQuestionsByNumberOfVotes(Integer.parseInt(strings[1]));

        } else if(strings[0].equals("helpful")){
            if(strings[1].equals("yes")){
                return searchDto.getQuestionsByFieldHelpful(true);
            } else if (strings[1].equals("no")){
                return searchDto.getQuestionsByFieldHelpful(false);
            } else {
                return searchDto.getQuestionsSortedByVotes();
            }
        }
    }
    return searchDto.search(search);
}

Стоит задача отрефакторить его, убрать if else и добавить универсальность его применения, т.е. если в будущем понадобится сделать какие-то новые условия для поиска, то это не составит труда сделать, например, написанием дополнительного класса, ну понятное дело функционал нужно сохранить, смотрел на разные паттерны, но что-то ничего не подходит, или я еще просто не дорос до понимания как это можно сделать, всем спасибо


Ответы (0 шт):