javascript - 忘记使用良好的域模型进行服务器端表单验证?

标签 javascript validation design-patterns domain-model

我正在使用 Zend Framework 和 jQuery 开发 MVC 应用程序。我的模型由三层组成:服务层、映射器、域模型。

迄今为止,我一直在努力处理输入验证 - 有些发生在客户端,有些发生在 Zend Form 中,有些发生在域模型中。职责变得困惑,并且有很多重复的逻辑。

经过深思熟虑,我看不出有什么理由不跳过任何 Zend Form 验证。我可以使用 javascript 验证简单的事情(包括正则表达式),并在需要时(通过 ajax)从服务器获取其他数据。当表单通过验证时,我会将其传递到服务器。

当然,我的域模型逻辑需要全面(复制客户端上的所有内容),但是域模型还有什么用途,对吧?

我错过了什么吗?有什么需要注意的问题吗?

编辑:需要明确的是,我根本不建议放弃服务器端验证。 (我意识到这是势在必行的。)我建议如果我的领域模型做到了这一点,那么也没有必要在表单中做到这一点。

最佳答案

您的域不适合在客户端上执行“之后”执行任何操作。

换个 Angular 思考:您在服务器上进行验证,并且额外在客户端上进行验证以使用户满意。

首先,您应该确保您想要验证的事情应该首先在域模型上完成(可能在 set() 方法中)。

然后您也可以(作为用户的额外功能)在客户端上执行此操作,但这只是为了让用户更快地反馈输入过程中出现的错误。永不替代。它永远不会阻止用户做一些使您的模型处于无效状态的事情。

此外,当您使模型持久化时,您应该始终检查它是否处于有效状态。无效的内容将使其无效,因此您不应该保存它。此外,当您将更改应用于应用程序中的多个模型(实体)时,请确保执行事务以验证这两个模型,并确保其中没有一个模型保存为无效状态。

关于javascript - 忘记使用良好的域模型进行服务器端表单验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357124/

相关文章:

web-services - Java EE应用程序设计

oop - 复合 DTO 中的 DTO 应该通过主键还是通过对象引用相互引用?

javascript - 元标记未修复移动浏览器初始缩放问题

javascript - 如何使用此选择器找到直接子代?

javascript - 如何创建一个在数组中导航的函数?

java - 将输入与保存在 JAVA 文本文件中的特定行进行比较

java - 在 Controller 和服务之间共享相同的方法前置条件逻辑?

javascript - ExpressJS 中的 POST 请求问题

jQuery 验证错误(元素未定义)

javascript - 使用 "shared"按钮(而不是类型 "submit"的输入元素)时如何使表单验证正常工作?