【发布时间】:2016-06-06 11:26:42
【问题描述】:
我在尝试重构服务器时想到了这种情况,该服务器根据请求中是否存在某些文字来响应请求。下面的代码几乎概括了它。
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;
}
}
这绝对比最初的更优雅。
但令我困扰的是,现在您必须确保 requests.properties 文件仅包含来自responses.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;
}
但我觉得我这样违反了 DRY 原则。所以,我的问题是:
- 是否有更好的方法来使用此属性文件架构并确保属性文件的结构适合我的情况?
- 还有其他更优雅的方式来实现重构吗?
【问题讨论】:
标签: java resourcebundle properties-file