База данных содержит строки типов: TYPE1, TYPE2, TYP3, TYPEN
Когда пользователь отправляет запрос в мой сервис и ждет ответа, я делаю следующее:
1) Вызов responseService
для ответа:
@Override
public GetResponseResponse getResponse(GetResponseRequest request)
return responseService.getResponse(request);
}
2) В responseService
подготовить ответ:
@Override
@Transactional
public GetResponseResponse getResponse(GetResponseRequest request) {
//get data from DB
SmevMessage smevMessage = smevMessageService.findOneFinished(request.getP1(), request.getP2());
//validate
//create general response for all TYPES of response
GetResponseResponse getResponseResponse = new GetResponseResponse();
//get Builder for concrete resonse part
UnpResponseBuilder unpResponseBuilder = unpResponseBuilderContext.getResponseBuilder(smevMessage.getRequestType());
Element element = unpResponseBuilder.createResponse(smevMessage);
//set part to general response
getResponseResponse.setAny(element);
return getResponseResponse;
}
Я генерирую общий ответ, но каждый ответ имеет определенную часть для каждого типа.Я использую шаблон дизайна стратегии для этого.
У меня есть несколько реализаций этого интерфейса:
public interface UnpResponseBuilder {
Element createResponse(SmevMessage smevMessage);
}
и один бин - контекст:
public interface UnpResponseBuilderContext {
UnpResponseBuilder getResponseBuilder(SmevMessageType smevMessageType);
void setBuilder(SmevMessageType smevMessageType, UnpResponseBuilder bean);
}
Мой вопрос : Правильно ли этоиспользовать стратегию для этой задачи?Возможно ли что-то еще?Если стратегия соответствует правильным именам для UnpResponseBuilderContext
и UnpResponseBuilder
?