如何解决说服我在使用异常进行用户验证方面我错了
|| 很难达成共识,尽管许多人说您不应使用异常来处理不良的用户输入。不过,我仍然不确定在我的特定情况下这样做是不好的。你能解释我为什么错吗? 接下来是我的代码(请仅关注异常处理方面)。我在这里使用异常的理由是,如果不这样做,假设我想使验证逻辑与关键字解析保持紧密联系(因为解析和验证紧密结合),我将不得不更改三种方法(submitOnAdd,submitOnUpdate) ,getKeywords),以使它们处理这种特殊情况。您是否认为在这种情况下使用例外肯定是错误的,还是个人风格的问题?public SubmitResponse internalSubmit(Map<String,String[]> submitParameters) {
try {
if (!submitParameters.containsKey(\"foo\")) {
return submitOnAdd(submitParameters);
} else {
return submitOnModify(submitParameters);
}
} catch (SubmitErrorException e) {
return SubmitResponse.fieldError(Arrays.asList(e.getSubmitError()));
}
}
SubmitResponse submitOnAdd(Map<String,String[]> submitParamters) {
// do some stuff
// ...
if (addKeywordList(createKeywordList(submitParameters.get(\"concatenated_keywords\"))
return SubmitResponse.OK();
return SubmitResponse.bad(\"Failed to add\");
}
SubmitResponse submitOnUpdate(Map<String,String[]> submitParamters) {
// do some other stuff
// ...
if (updateKeywordList(createKeywordList(submitParameters.get(\"concatenated_keywords\"))
return SubmitResponse.OK();
return SubmitResponse.bad(\"Failed to update\");
}
List<Keyword> getKeywords(String concatenatedKeywords) {
List<String> rawKeywords = splitKeywords(concatenatedKeywords);
return Collections.transform(new Function<String,Keyword>() {
@Override
public KeywordListProto.Keyword apply(String expression) {
return buildKeyword(expression);
}
});
}
private Keyword buildKeyword(String rawKeyword) {
// parse the raw keyword
if (/*parsing Failed */)
throw new SubmitResponseException(\"Failed to parse keyword \" + rawKeyword);
return parsedKeyword;
}
解决方法
我不能说我永远不建议在输入验证中的某个地方使用异常。但是在这种情况下,我会说这增加了很多混乱。我会:
添加一个单独的方法来处理验证。 (可能必须在几个地方调用此方法,这是负面的,但它可能会使代码更易于理解)。
在更理想的情况下,我将更接近用户输入进行验证,并且不允许提交无效数据。 (可能的负面影响是验证和解析逻辑的分离,但是如果可以使用相同的类来完成这两种操作,则可以避免)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。