<分区>
我知道这样的问题在 stackoverflow 上被问过很多次,但即使在阅读了这些之后,我仍然感到困惑。我想通过示例演示问题来明确应该在何处处理表单验证。
假设我的网站上有一个表单,其中有一个字段供某人填写并随后提交。该模型希望 Controller 正确地传递这个值,以便在内部处理该值。该模型通过函数 getInput
接收输入,它设置了以下规则:
- 输入必须是字符串类型。
- 输入必须大于0且小于或等于100个字符。
- 输入的内容必须与电子邮件地址的模式相匹配。
如果这些条件中的任何一个不满足,我想我应该在 getInput
中抛出一个异常;毕竟, Controller 传递了一个与模型设置的规则不匹配的值。
除了上述规则外, Controller (至少我相当确定这适用于 Controller )还必须在脚本继续执行其他三个规则之前首先验证输入值是否已设置。
现在我的问题是: Controller 要验证这 (4) 条规则中的哪一条,模型要验证哪一条?很明显, Controller 知道模型请求什么,因此它可以对此进行调整(如果不知道,它可能会面临抛出异常的后果)。另一方面,拥有多个 Controller 似乎是多余的,它们都使用模型及其 getInput
,验证相同类型的字符串以匹配模型设置的规则。此外,如果 Controller 首先验证输入的长度是否正确 - 例如 - 然后模型立即执行完全相同的操作,一旦 getInput
被调用,似乎会出现更多的冗余。
在这个例子中, Controller 和模型可以被看作是一种伙伴关系,模型是一个脾气暴躁的完美主义者,他将验证他从 Controller 获得的输入,而不管这些努力尝试的亲切伙伴的行为满足他所有的愿望。但这样的关系不是非常低效吗?