Я придумал этот случай, когда я попытался реорганизовать сервер, который ответил на запросы, исходя из того, существуют ли какие-то литералы или нет внутри запроса. Следующий код в значительной степени подводит итог.Как заверить, что значения в файле свойств относятся к набору ключей другого файла свойств?
if (request.contains("AAA")) {
send(SUCCESS_RESPONSE);
} else if (request.contains("BBB")) {
send(FAILURE_RESPONSE);
} ...
Итак, я создал responses.properties файл, который содержал возможные ответы и ключ для идентификации каждого из них:
SUCCESS_RESPONSE=<here there is a big successful response>
FAILURE_RESPONSE=<here there is a smaller failure response>
...
и файл requests.properties, который содержал буквальный к искать в запросе и ответе, что сервер будет посылать, если ключ встречается:
AAA=SUCCESS_RESPONSE
BBB=FAILURE_RESPONSE
...
и моей стороне сервера код был переработан на это:
ResourceBundle responses = ResourceBundle.getBundle("responses");
ResourceBundle requests = ResourceBundle.getBundle("requests);
...
for (String requestKey : requests.keySet()) {
if (clientRequest.contains(requestKey)) {
send(responses.getString(requests.getString(requestKey)));
break;
}
}
, который определенно более изящный, чем первоначальный.
Но меня беспокоит то, что теперь вы должны быть уверены, что файл request.properties содержит значения только из набора файлов response.properties.
Я написал метод, который проверяет это:
private static boolean resourceBundlesAreWellStructured() {
Set<String> responseKeys = responses.keySet();
for (String requestKey : requests.keySet()) {
String requestValue = requests.getString(requestKey);
if (!responseKeys.contains(requestValue)) {
return false;
}
}
return true;
}
, но я чувствую, что я нарушаю СУХОЙ принцип таким образом. Итак, мои вопросы:
- Есть ли лучший способ использовать эту схему файла свойств и убедиться, что файл свойств хорошо структурирован для моего случая?
- Есть ли другой, более элегантный способ достижения рефакторинга?
Спасибо Кен! Да, у Java 8 есть отличные возможности, но мне пришлось придерживаться Java 7 для этого проекта ... –
@Alex, тогда ваш метод неплохой, используйте его, без сомнения –