数据验证应该在哪里进行?

Jef*_*eff 13 database validation n-tier-architecture

我已经阅读了关于数据验证应该发生在哪里的相互矛盾的哲学,这让我更加困惑.有人说它应该只在数据库中.其他人说验证规则应该反映在其他层,如bll或ui.

数据验证应该在哪里?规则应该分为多个层次吗?有关在数据库顶部运行的应用程序中验证数据的时间和位置的一些实际最佳实践(与理论相反,与云类型相关).

MrE*_*yes 9

我的2美分:

数据验证应在两个位置进行:

  1. 处理数据的点,例如验证SQL查询的输入参数.

  2. 在提交数据时进行一般性验证,例如在Web应用程序中,应在客户端进行一些验证.优点是您可以快速通知用户输入问题,即错误形成的电话号码,字符串太长等等.但是,对于Web应用程序,恶意用户不应该依赖于权威验证检查.可以绕过客户端验证.

在我看来,数据库不应该执行一般验证,数据应该在进入数据库之前进行验证/转义/清理.也就是说,您的数据库模式可以通过列数据类型,约束等为您提供一定程度的抽象验证.也就是说,任何可能触发这些问题的数据都应该在传递到数据库之前进行"清理".

这说,有许多错误的方法,但没有正确的方法.验证取决于应用程序的体系结构,其中的数据性质以及数据的使用方式.