“深度防御”的原则规定,应该在多个地方强制实施约束,以便如果一段数据绕过或滑过一层,它将被下一层捕获。一个很好的例子是在web应用中--你将验证放在客户端的javascript中,放在服务器端的代码中(PHP/Ruby/ASP/随便什么),然后你把这些规则放在数据库中(例如外键约束)。这样,任何通过Javascript验证的数据都会被服务器端捕获。任何通过服务器验证的数据都会被数据库约束捕获。
然而,这似乎违反了DRY (不要重复自己)原则。在这里,有三个地方重复了相同的验证规则。我知道有一些方法可以生成客户端javascript,这样它就可以执行服务器端的验证。我的问题是,如何整合数据库约束和服务器端代码?有没有办法生成代码,让它自动实施数据库约束?
发布于 2011-03-01 04:16:47
DRY (不要重复自己)是一个源代码,最佳实践原则,基本上意味着:不要复制代码,因为这样做会降低可维护性并增加出现错误的机会。
在数据库中强制引用完整性并不是对DRY的真正违反,因为:
上的源代码的一部分,除了客户端视图之外,还可以通过许多其他方式访问和修改
发布于 2011-03-01 04:16:48
为此,我们让一个模块成为“安全规则”的所有者,然后为它创建一个AJAX接口,以便服务器端代码直接调用它,然后前端UI组件调用AJAX接口,但它们都与同一个模块对话。通过这种方式,访问规则只存在于一个地方(安全模块),而您仍然在任何地方强制执行这些规则。这有一个额外的优势,那就是将规则保留在客户端可下载的代码之外。
https://stackoverflow.com/questions/5146990
复制相似问题