2011-08-29 41 views
2

如果视图包含无效数据,谁负责向控制器报告存在无效数据? [在坚持之前]。图形用户界面和数据验证[MVC]

例如:

Model: 
    Name [must not be empty, and at least X characters] 
    Age [must be an integer, greater than 0] 
View: 
    Text box for the name [with some kind of indicator of being invalid] 
    Text box for the age [with some kind of indicator of being invalid] 

当控制器被通知数据输入完成。 [从视图]负责让控制器知道数据无效的类? [假设用户没有输入姓名,并且在年龄段输入一个非数字]我可以看到它是模型的责任,因为它直接负责数据和上下文。不过,我也可以看到它是如何承担责任的,因为它允许首先输入无效数据。

回答

2

控制器负责MVC三元组中的“逻辑”,并确定数据是否有效绝对是“逻辑”,所以它实际上是控制器负责决定数据是否有效。也就是说,模型参与决策的情况并不少见(例如:通过验证其成员的属性或实现验证帮助程序接口)。

由于视图不应包含任何重要的逻辑,所以视图不应参与数据是否有效的决定。该视图可能会显示有关模型和/或其部分的有效性的信息(例如:文本框旁边的“不良值”指示符),但显示该信息的决定最终应由控制器进行。

+0

这就是我怀疑的。这个模型真的是唯一一个真正关心数据传入的人。然而,这个视图有点被处理并且滤除了不好的输入。 [如果数据是一个数字|密码| etc类型那就是你设置文本框的内容] – monksy

0

我会说视图应该询问模型输入是否有效。最终,它是控制数据的模型。