gpt4 book ai didi

java - 说服我使用异常进行用户验证是错误的

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:46 24 4
gpt4 key购买 nike

尽管 many people say you should not use exceptions to handle bad user input 很难达成共识.不过,我不认为在我的具体情况下这样做是件坏事。你能解释一下为什么我错了吗?

我的代码(请只关注异常处理方面)如下。我在这里使用异常的理由是,如果我不这样做,假设我想让验证逻辑接近关键字解析(因为解析和验证紧密耦合),我将不得不更改三个方法(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;
}

最佳答案

我不能说我绝不会建议在输入验证的某处使用异常。但在这种情况下,我会说它增加了很多困惑。我会:

  • 添加一个单独的方法来处理验证。 (可能必须在多个地方调用此方法,这是不利的,但它可能会使代码更易于理解)。
  • 在更理想的情况下,我会在更靠近用户输入的地方进行验证,并且不允许提交无效数据。 (一个可能的负面影响是验证和解析逻辑的分离,但如果您能以某种方式使用同一个类来完成这两项操作,则可以避免这种情况)。

关于java - 说服我使用异常进行用户验证是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com