【问题标题】:Defense in Depth vs. DRY纵深防御 vs. DRY
【发布时间】:2011-02-28 20:07:17
【问题描述】:

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

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

【问题讨论】:

    标签: validation code-generation dry


    【解决方案1】:

    我们通过让一个模块成为“安全规则”的所有者,然后也为它创建一个 AJAX 接口,以便服务器端代码直接调用它,然后前端 UI 组件调用它来做到这一点AJAX 接口,但它们都在与同一个模块通信。通过这种方式,访问规则只存在于一个地方(安全模块),您仍然可以在任何地方强制执行这些规则。这具有将规则保留在客户端可下载代码之外的额外优势。

    【讨论】:

      【解决方案2】:

      DRY(不要重复自己)是一种源代码最佳实践原则,其基本意思是:不要重复代码,因为这样做会降低可维护性并增加出现错误的机会。

      在数据库中强制引用完整性并不是真正违反 DRY,因为:

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

      【讨论】:

      • 所以您的回答基本上是不要(过多)担心 DRY,因为数据库和应用程序代码是两个不同的系统?
      • 不完全是。担心代码中的 DRY,数据库中的数据完整性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2013-06-05
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多