微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

说服我在使用异常进行用户验证方面我错了

如何解决说服我在使用异常进行用户验证方面我错了

|| 很难达成共识,尽管许多人说您不应使用异常来处理不良的用户输入。不过,我仍然不确定在我的特定情况下这样做是不好的。你能解释我为什么错吗? 接下来是我的代码(请仅关注异常处理方面)。我在这里使用异常的理由是,如果不这样做,假设我想使验证逻辑与关键字解析保持紧密联系(因为解析和验证紧密结合),我将不得不更改三种方法(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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?