我一直在我的应用程序层(模型)和我的数据库层(引发错误的存储过程)中执行业务规则。应该在应用程序层和数据库层执行业务规则,还是只执行其中一个?
我一直在重复我的验证在这两个地方有几个原因:
- 如果条件 之间变化时,他们在 应用程序代码进行检查,当他们 在数据库中检查, 业务规则检查数据库 将节省一天。数据库 还允许我以比我的应用程序代码中的 更简单的方式锁定各种 记录,所以在这里看起来很自然。
- 如果我们有 直接通过我的 存储过程/函数其 正在做的业务规则 验证做一些批处理数据 插入/更新到数据库中,如果我的路线 所有这些操作,就没有我的机会 即使我没有通过应用程序进行单次输入时得到的保护,也会导致数据不正确。
- 虽然 执行这些东西只有在 数据库会对实际数据相同的效果 ,它首先制定好 努力,以验证它是否符合 之前似乎 不当在 数据库,只是把数据约束和业务规则。
什么是正确的平衡?
业务逻辑的强制执行和数据完整性的执行有什么区别?假设我有一个业务规则,最多可以将3个人分配给主管。当我去插入#4人时,是否因为每个主管人数超过3人的数据完整性错误而失败?还是违反了业务规则?如果在验证之前没有锁定主管记录,那么在执行插入操作时,主管下至多有两个人,应用程序代码如何100%确定该规则不会被破坏? – 2010-11-18 16:50:29
@Rednerln - 变化率。数据库完整性规则可能被认为比业务规则长得多。你作为一个主管人员的例子,如果我这样做的话,我很难说明如何做一个数据库约束,它必须是基于数据的(基于配置设置的udf)。如果规则发生变化,那么就必须提出这个问题:如何处理违反该原则的数据。通常情况下,您希望数据库规则只能放宽,不能收敛或定性更改。 – 2010-11-18 22:39:13
@Rednerln - 在多种情况下,您希望人们能够使用他们的BI工具或其他任何方式访问您的数据库访问层(也许是视图),并知道他们的假设是有效的,数据库具有凝聚力和完整性周长。 – 2010-11-18 22:41:24