作为广泛测试用例的一部分,我正在构建一个基于ajax的类似CMS的应用程序,它为各种文档类型提供CRUD功能,例如:文章、标记等。
在服务器和客户端,我正在考虑使用JSON( http://json-schema.org/ )作为一种以枯燥的方式进行用户输入验证的方法(即:1验证模式,用于服务器端和客户端,没有重复代码等等)。这似乎很棒,因为:
但是,除了通常对用户输入的验证之外,我还想在服务器上进行一些额外的检查(例如:检查用户想要创建的标记的名称是否已经存在)。
理想情况下,我希望在我的一般服务器端验证代码中包含这些类型的检查(正如前面所说的,这将基于JSON-模式)。但是,我并不完全相信这是正确的方法,因为这些额外的检查并不仅仅基于提供的JSON数据,而是需要额外的数据来验证(例如:系统中现有标记的名称是否已经存在)。
那么,在服务器端加入像上面描述的基于json模式的验证框架中那样的额外检查(从设计/体系结构上看)会是个好主意吗?这是一个优雅的解决方案吗?或者你会把它们分开吗?如果没有,为什么不呢?您还会建议在客户端和服务器端验证方面保持干燥吗?
你认为如何?
一些额外的上下文/目标的文本-案例下面的一些背景信息。
谢谢,Geert-Jan
一些背景/目标:
1. templating: done through Mustache templating on client and server-side. Intial rendering and incremental rendering through ajax are done based on 1 and the same template. I wanted to go for something different than Mustache (bc. of it's lack of expressive power), but it works for this prototype at least. (See previous question for alternatives, on which I'm still looking for an answer: [Client-side templating language with java compiler as well (DRY templating) ](https://stackoverflow.com/questions/6831718/client-side-templating-language-with-java-compiler-as-well-dry-templating) )
2. DRY input-validation: as described above
验证流程(如果失败):
发布于 2013-05-01 07:15:11
在服务器上有一个单一的验证定义是非常可能的,也是最令人满意的事情之一(每个模型),然后在服务器上为客户端验证和基于AJAX的验证生成适当的JS。
有一个非常好的架构,可以以一种优雅的方式将所有验证规则存储在模型中(根据需要将其划分为适当的“场景”)。从那里开始,就需要翻转几个开关,使特定的表单客户端或AJAX验证。我相信Yii的接口是基于Rails的。
无论如何,我强烈建议查看Yii的设计中的以下要点;即使您不了解PHP,也可以使用它作为灵感:
CModel::rules() =>模型验证规则的干源CActiveForm =>用于基于模型属性生成表单元素CActiveForm::textField()
CValidator =>基类,其中提供了客户端验证能力我认为追求枯燥的验证规则声明是明智的,在我的经验中,实现100%并且仍然有丰富的表单和丰富的验证规则并不是不现实的。(如果你不需要管理所有的客户端-验证JS.),你会热爱生活吗?
希望这能有所帮助。
https://stackoverflow.com/questions/6898807
复制相似问题