У меня есть REST API, который будет предоставлять результаты поиска на основе определенных критериев поиска.Пользователь может выполнять поиск, используя идентификатор отдела, идентификатор пользователя и дату регистрации.Таким образом, здесь пользователь может искать в 7 различных комбинациях.
- Поиск только по идентификатору Dept
- Поиск только по идентификатору пользователя
- Поиск только по дате регистрации
- Поиск по идентификатору отдела и идентификатору пользователя
- Поиск по идентификатору пользователя и дате регистрации
- Поиск по идентификатору отдела и дате регистрации
- Поиск будет выполнен по всем 3 критериям (идентификатор отдела, Идентификатор пользователя и Дата регистрации)
В соответствии с текущим дизайном нашего приложения, Для каждого критерия мне придется вызывать различные службы в разном порядке для получения информации.
Например: У нас естьсуществующая служба пользователя, в которой есть данные пользователя, служба отдела, в которой есть данные.Так что, если пользователь ищет только идентификатор пользователя, я бы сразу перейти к UserService.Если пользователь выполняет поиск с идентификатором Dept ID & User, мне сначала нужно будет запросить службу Dept, а затем службу User.
Мой текущий код:
if(Util.hasOnlyUserId(searchCriteria)) {
searchResponse = searchWithUserId(searchRequest);
} else if(Util.hasOnlyJoinedDate(searchCriteria)) {
searchResponse = searchWithDate(searchRequest);
} else if (Util.hasOnlyDeptID(searchCriteria)) {
searchResponse = searchWithDeptId(searchRequest);
} else if (Util.hasUserIdAndDeptId(searchCriteria)) {
searchResponse = searchWithUserIdAndDeptId(searchRequest);
} else if (Util.hasUserIdAndDate(searchCriteria)){
searchResponse = searchWithUserIdAndDate(searchRequest);
} else if (Util.hasDeptIdAndDate(searchCriteria)) {
searchResponse = searchWithDeptIdAndDate(searchRequest);
} else if (Util.hasAllCriteria(searchCriteria)) {
searchResponse = searchWithAllCriteria(searchRequest);
}
Здесь searchCriteria является моим объектом запроса (POJO), который имеет эти элементы поиска как частные члены.
searchResponse здесь - это тип объекта SearchResponse, который является фактическим ответом API, и он содержит такие детали пользователя, как name, id, position, lastSalaryDrawn, CommuteType,MaritalStatus и дата последнего продвижения
Я пытался оптимизировать это множественное условие if-else, другими словами, чтобы избежать этого множественного условия.Я попытался отделить каждого из них и поместить их в разные методы.Но это просто не удовлетворяет меня, и кажется, что оно находится в неоптимизируемом состоянии.
Буду очень признателен за любые идеи о том, как я могу это сделать.
Редактировать:Мы используем JPA для взаимодействия с MySQL.Проблема здесь в том, что я не получу информацию прямым способом из БД.Поэтому построение динамического запроса может не сработать.Информация должна быть получена из нескольких микросервисов, которые, в свою очередь, сделают вызов своей собственной БД и отправят необходимую информацию в ответ.Я надеюсь, что это имеет смысл.