【问题标题】:struts2 - Why use declarative validation?struts2 - 为什么使用声明式验证?
【发布时间】:2012-10-22 22:55:00
【问题描述】:

在struts2中,引入验证基本上有两种方法:你都可以这样做

  • 以编程方式,或
  • 以声明方式。

程序化验证主要涉及在您的操作类上实现接口Validatable,为此需要充实方法void validate();。如果要将验证问题报告给用户,则存在更复杂的界面ValidationAware

声明性验证中,每个要验证的操作都有自己的验证文件,称为myactionname-validation.xml,其中使用 XML 描述语言声明验证器。


在我工作的公司,我们正在使用程序化验证原则,使用小型验证框架(内部编写)来帮助重用常见的验证器模式。然而,我刚刚读过一本 struts2 的书,声明式验证是首选的方法。这本书提供了很多关于如何设置声明式验证的说明,但它几乎没有涉及为什么声明式方式更可取的主题。

我看到了一些普遍的论点,它们有时支持声明式 XML 样式的配置,但我看不出它们在这里适用:更改此配置(即验证)与由操作处理的模型和用于修改模型值的 GUI。这不是需要在不重新编译的情况下“即时”配置的东西。

在 struts2 中使用声明式样式验证有哪些参数?

是否值得深入研究另一种 XML 标记方言并为处理单独的validation.xml 文件而烦恼?以编程方式执行它不是更容易,而且可能更易于维护,因为 Java 源代码(或者更确切地说是您选择的 IDE)将为您提供重构工具、结构化搜索等,而 XML 配置支持通常充其量是可以容忍的?

【问题讨论】:

  • 对于它的价值,我更喜欢程序化方法,并且我已经使用该框架大约五年了。

标签: java xml validation struts2 declarative


【解决方案1】:

以编程方式完成它不是更容易[...]

不是真的,虽然也不是很困难。构建错误消息是一个更加手动的过程,但是,大多数人并没有使用 XML 中的全部功能。

[...] 可能更易于维护 [...]

不是真的,虽然也不是特别难。

对于具有代码生成的代码库,IMO 构建 XML 比构建 Java 更容易,但大多数代码库不会在该深度使用代码生成。

为了生成人类可读的文档,XML 和注释比 Java 代码更容易处理。

我使用的 IDE 具有相当不错的 S2 支持,我从来没有想过“如果我用代码编写它会容易得多”,而且我不记得做过很多,如果有的话,在我的验证中重构,这让我希望它是在代码中而不是在 XML 中。

关键是在现有机制存在时重用它们:它是一种微不足道的已知机制,集成在框架中,每个开发 S2 应用程序的人都知道它是如何工作的。

【讨论】:

    【解决方案2】:

    声明式验证更具可读性、功能强大且可自定义。 在编写良好的 Web 应用程序中(良好的 DTO 或 VO 定义,每个要执行的逻辑操作一个 Action),您可以通过多种方式共享它。

    例如,如果您使用访问者验证器(验证来自 JSP 的对象列表),则将 .xml 文件放在对象包(带有对象名称)中,而不是放在操作包中,如果您使用它多个 Action 中的对象,您只需编写其验证规则一次,并根据需要重复使用它多少次。

    我不是 XML 配置的粉丝,但是在以旧方式进行了几个项目后,我发现了这种验证的全部潜力,我不会再回来了。

    查看at this,了解您可能想知道的一些提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2021-04-17
      • 2014-11-28
      • 1970-01-01
      相关资源
      最近更新 更多