2

在尝试放置错误处理例程以优化数据完整性同时还考虑到速度和效率(并在此过程中浪费了 100 小时)之后,我决定问这个问题。所以这里是设置。

Database  ->  python classes  ->   python code     ->   javascript
 MongoDB  |   that represent  |   that serves      |  web interface
                the data         pages (pyramid)      

我希望数据稳健,这是第一要务。所以现在我在页面的 javascript 端验证数据,但也在或多或少代表数据结构的 python 类中验证。虽然大多数服务器例程通过 python 类运行,但有时感觉效率很低,因为它必须通过不同级别的错误检查。

编辑:我想我应该澄清一下。我不希望统一客户端和服务器端代码的验证。很抱歉写得不好。我正在寻找更多以找出应该在哪里进行服务器端验证。它应该在数据库的直接接口中,还是在接收数据的 Web 服务器代码中。

例如,如果我有一个带有条形码的对象,我应该在通过 AJAX 审查数据的代码中验证条形码,还是应该只调用对象class并在那里验证?

同样,是否有关于如何进行一般错误检查的指导方针?我想成为专业人士,学习但希望不必读一整本书。

我不是软件工程师,但我希望那些熟悉复杂项目的人可以告诉我在哪里可以找到关于如何在这种情况下进行建模/错误检查的一些指南。

我不一定要寻找答案,但更像是在创建具有不同层的项目时向我指出一组简短的指导方针。希望不会太长。。

我什至不知道在帖子中使用什么标签。帮助!!

4

2 回答 2

2

在客户端验证和在服务器上验证完全有不同的目的。在服务器上进行验证是为了确保您的模型不变量保持不变,并且必须这样做以保持数据完整性。在客户端上进行验证是为了让用户收到一条友好的错误消息,告诉他他的输入将验证数据完整性,而不是让回溯炸毁他的脸。

因此,在服务器上进行验证时,有一个细微的差别,您只关心数据是否有效。在客户端上,您还更细粒度地关心输入可能无效的原因。(另一件必须在客户端处理的事情是输入格式错误,即在需要数字的地方输入字符。)

有可能在中间相遇一点。如果您的模型有效性约束以声明方式指定,您可以使用该元数据来生成一些客户端验证,但这还不够。一个很好的例子是用户注册。通常您需要两个密码字段,并且您希望两者中的输入匹配,但模型将只包含一个密码属性。您可能还想检查密码复杂性,但它不一定是域模型不变量。(也就是说,即使用户的密码很弱,您的应用程序也会正常运行,并且密码复杂性策略会随着时间的推移而改变,而不会破坏数据完整性。)

客户端验证特有的另一个问题是您经常需要表达验证检查之间的依赖关系。即,您有一个必填字段,该字段必须小于100. 您需要验证 a) 该字段是否有值;b) 该字段值是一个有效的整数;c) 字段值低于100. 如果这些检查中的任何一个失败,您希望避免显示不必要的错误消息,以便按顺序进行进一步检查,以便告诉用户他的具体错误是什么。该模型不需要关心这种区别。(此外:这是一些框架惨遭失败的地方——JSF 或 Spring MVC 或其中任何一个首先尝试从输入字符串到表单对象属性的数据类型转换,如果失败,它们将无法执行任何进一步的验证。 )

总之,以上暗示如果您关心数据完整性可用性,则必须至少验证数据两次,因为即使存在一些重叠,验证也会达到不同的目的。客户端验证将比模型层验证有更多的检查和更细粒度的检查。我不会真正尝试统一它们,除非您选择的框架使它变得容易。(我不了解 Pyramid - Django 将这些问题分开,因为Forms 与您Model的 s 不同,两者都可以验证,并且它们由ModelForms 连接,让您可以向模型执行的验证添加额外的验证.)

于 2013-09-30T00:51:26.760 回答
0

不确定我是否完全理解您的问题,但可以在此处找到有关 pymongo 的错误处理 -

不确定您是否使用了特定的 ORM - 文档有指向可用内容的链接,并且它们各自有自己的最佳用法:

您是否有正在使用的特定 ORM,或者通过 pymongo 实现自己的 ORM?

于 2013-09-30T00:48:18.653 回答