深度防御与DRY

时间:2011-02-28 20:07:18

标签: validation code-generation dry

“纵深防御”的原则规定,约束应该在多个地方强制执行,这样,如果一个数据绕过或滑过一个层,它就会被捕获到下一个层。一个很好的例子是在一个Web应用程序中 - 您将验证放在客户端javascript,服务器端代码(PHP / Ruby / ASP /等)中,然后将这些规则放在数据库中(例如外键约束)。这样,任何通过Javascript验证的数据都会被服务器端捕获。任何超过服务器验证的数据都会被数据库约束捕获。

然而,这似乎违反了DRY(不要重复自己)的原则。在这里,您有三个地方重复相同的验证规则。我知道有一些方法可以生成客户端javascript,从而强制执行服务器端验证。我的问题是,如何整合数据库约束和服务器端代码?有没有办法生成代码,以便自动强制执行数据库约束?

2 个答案:

答案 0 :(得分:3)

我们通过将单个模块作为“安全规则”的所有者,然后为其创建AJAX接口,以便服务器端代码直接调用它,然后调用前端UI组件来完成此操作AJAX界面,但他们都在谈论同一个模块。通过这种方式,访问规则只能在一个地方(安全模块),您仍然可以在任何地方执行规则。这样做的另一个好处是可以将规则保留在客户端可下载代码之外。

答案 1 :(得分:1)

DRY(不要重复自己)是源代码,最佳实践原则,基本上意味着:不要重复代码,因为如果你这样做,你将降低可维护性并增加错误的机会。

在数据库中实施参照完整性并不违反DRY,因为:

  • 数据库不是源代码的一部分
  • 独立站立
  • 除了客户端视图之外,还可以通过许多其他方式访问和修改
  • 。例如。查询和报告引擎