Model view controller MVC软件体系结构中验证逻辑的位置

Model view controller MVC软件体系结构中验证逻辑的位置,model-view-controller,Model View Controller,我实际上开始学习mvc架构 我不知道是将用户名注册验证逻辑放在模型中还是控制器中 我有一些状态消息,告诉用户要注册的新用户名是否可用 我开始感到困惑,因为大多数来源都说它应该在模型中,因为它涉及用户名数据,在将其放入数据库之前要验证(而不是检查用户名字段的输入)。但是,状态消息应该在用户按键或更改更改用户名字段之前立即响应,这使我认为它应该在控制器中,因为它涉及更多用户事件 我关心的不是要使用的框架,而是涉及MVC的标准概念。基于上述条件/前提,我应该将用户名验证逻辑放在哪里?它应该在模型中,正

我实际上开始学习mvc架构

我不知道是将用户名注册验证逻辑放在模型中还是控制器中

我有一些状态消息,告诉用户要注册的新用户名是否可用

我开始感到困惑,因为大多数来源都说它应该在模型中,因为它涉及用户名数据,在将其放入数据库之前要验证(而不是检查用户名字段的输入)。但是,状态消息应该在用户按键或更改更改用户名字段之前立即响应,这使我认为它应该在控制器中,因为它涉及更多用户事件


我关心的不是要使用的框架,而是涉及MVC的标准概念。基于上述条件/前提,我应该将用户名验证逻辑放在哪里?

它应该在模型中,正如您自己阅读的那样。我认为您正在混淆“验证过程”和“验证规则”。验证过程将在客户端的controller中进行,但验证规则是模型的属性。

正如Shikhar所说,实际检查名称是否可接受/可用是模型的责任。控制器可以提供一个由页面上的某个AJAX调用的操作,这样当按下每个键时,页面上的文本都会发送到专用控制器操作,然后该操作通过模型进行验证(任何涉及数据库的都是模型)

在视图中有两件事需要考虑,例如当用户正在快速键入时,在创建新的调用之前,应取消以前的调用,因为这可能会混淆。


此外,当用户在数据输入结束时提交表单时发生的控制器post操作应执行与AJAX操作相同的验证,以避免用户之间的竞争条件。

作为@Colin Desmond的补充,模型实例不应包含“错误”数据,因此,在我看来,在MVC环境中,应该包含验证逻辑。因此,无论在何处创建模型实例,都不能使用错误的数据对其进行初始化,并且在模型实例上操作的类可以依赖其数据。例外情况是,如果存在依赖于视图的验证逻辑。应在控制器中实现视图相关逻辑(异常)


例如,电子邮件地址的验证应该在模型中实现。但是,模型可能允许金额为负数的银行交易,但视图可能不允许金额为负数的交易。此异常的逻辑应该在控制器上实现。

在我的问题中。哪个部分是验证过程,哪个部分是验证规则?在按键时,如果您检查用户名是否有效-它的验证过程。如果您检查用户名是否为字母数字,那么它就是一个验证规则,您可能会得到这样的验证规则:user->validationRule(user)或user->isValid()验证与数据库无关。我发现这个问题有一点很有趣,如果我遇到系统使用某种jQuery插件验证所有输入的情况(客户端)然后在服务器端(模型)再次验证。使用jQuery验证(客户端)将是验证过程,在服务器端验证(模型将是验证规则)。对吗?不,两者都是验证过程,在一种情况下,规则在客户端(jQuery),在另一种情况下,规则在模型(服务器端)