GUI和数据验证[MVC]

时间:2011-08-29 21:46:24

标签: model-view-controller design-patterns

如果视图包含无效数据,谁负责向控制器报告存在无效数据? [坚持之前]。

例如:

 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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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