表单验证的状态模式

State pattern for form validation

我需要使用表单来捕获用户输入。表单中的每个字段都将经过验证。该字段将有效或无效。根据用户输入,可能会启用、禁用、过滤或以其他方式修改表单的某些部分。

我正在考虑通过表单对状态转换进行建模的状态模式。每个状态都会影响表单的显示、过滤等方式。但是,我对状态模式的理解是,它需要非常多的状态来表示我的表单。

例如;如果我有 10 个可以有效或无效的字段,那就是:

10P2 = 90 个排列。

在代码中要表示的状态数量巨大,我已经粗略地简化了这个问题。

问题:

  1. 我是否误解了如何为我的问题实施状态模式?
  2. 如果不是,状态模式是否是我问题的错误解决方案?
  3. 如果最后一个问题是肯定的,什么是好的通用解决方案?

Am I misunderstanding how to implement the state pattern for my problem?

我想你没看错。

If not, is the state pattern the wrong solution to my problem?

是的。当状态(条件)数量有限时,状态模式是一个很好的解决方案。你的情况不是这样。

If yes to the last question, what is a good general solution?

我建议使用 Specification 模式。您可以将任意数量的规则附加到您的输入字段。这些规则可以确定该字段是否应该启用或禁用、可见或隐藏。另外值得注意的是,规则可以很容易地单独进行单元测试。