Java 在MVC中,可以在视图中存储正则表达式模式并进行验证检查吗?

Java 在MVC中,可以在视图中存储正则表达式模式并进行验证检查吗?,java,model-view-controller,Java,Model View Controller,我将我的正则表达式模式存储为: private final Pattern regex1... private final Pattern regex2... 就像我眼中的田野。我在视图类中有一个验证检查方法,当验证失败时,它会向控制器抛出一个异常。这在MVC中是否有效 public void validation() throws Exception{ if(regex failed){ throw new exception("..."); } .

我将我的正则表达式模式存储为:

private final Pattern regex1...
private final Pattern regex2...
就像我眼中的田野。我在视图类中有一个验证检查方法,当验证失败时,它会向控制器抛出一个异常。这在MVC中是否有效

public void validation() throws Exception{

    if(regex failed){
        throw new exception("...");
    }
    ...

}

如果你的决定背后有一个很好的理由的话,那么如何分割代码总是取决于你自己

但是,我更愿意将验证方法至少放入控制器中,因为它看起来像是由按钮的actionevent触发的。(事件应在控制器中处理)

您可以做的是在视图中创建一个methode,如果验证失败,它会在gui中显示一条错误消息


所有这些都意味着正则表达式也保存在控制器中。

这不是一个好的做法。逻辑必须转移到专用的分层结构中。 最好的方法是创建专用的验证器类或创建服务的验证方法(如果在验证过程中必须执行某些操作,如在DB中搜索)。这样,单元测试就可以很好地覆盖验证器类

@自动连线 UserInputValidator UserInputValidator

public void validation()引发异常{

if(userInputValidator.validate(param1, param2)){
    throw new exception("...");
}
...

}/P>< P>当我们讨论MVC时,最好考虑到随着应用程序的发展,“输入”最终可能来自多个地方。p>

  • 使用者
  • 服务电话
  • 文件
  • 其他
在这种情况下,我们不希望将验证机制构建到视图或控制器中,而是构建到控制器只需使用/集成的另一个组件中

验证可能是一个交叉问题(但并非总是) 理想情况下,我们希望避免重复输入数据的验证,尤其是当数据始终以相同的方式有效时。重复验证可能会导致不一致。假设UI中的数据无效,但服务调用中的相同数据被视为“ok”

有多种方法可以将验证逻辑与视图分开:

  • 为bean添加注释
    • 创建自定义验证注释(抽象定义的正则表达式)和/或使用提供
  • 专门服务
解决验证失败 我可以看出,当验证失败时,您正在抛出异常。考虑一下这篇令人敬畏的文章吧。建议是验证失败是可以预期的,而不是异常情况。他还建议采用通知方式

通知方法的另一个优点是,您的专用验证服务/层可以支持多个验证失败。这将允许您的视图突出显示多个字段,或者允许您的API返回失败列表