Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller GUI和数据验证[MVC]_Model View Controller_Design Patterns - Fatal编程技术网

Model view controller GUI和数据验证[MVC]

Model view controller GUI和数据验证[MVC],model-view-controller,design-patterns,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

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

例如:

 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]

当控制器收到数据输入完成的通知时。[从视图]哪个类负责让控制器知道数据无效?[假设用户没有输入姓名,并为年龄输入了非数字]我认为这是模型的责任,因为它直接负责数据和上下文。但是,我也可以看到视图的责任,因为它首先允许输入无效数据。

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

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


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

我怀疑这是错误的。该模型实际上是唯一真正关心传入数据的模型。然而,视图可以处理并过滤掉错误的输入。[如果数据是数字|密码|等类型,则将文本框设置为该类型]