业务逻辑的好地方验证

时间:2011-12-30 05:48:35

标签: database validation design-patterns database-design web-applications

好的,让我们从头开始吧。例如,我正在开发一些大项目。对于我们所有人来说,这些项目包含许多共同逻辑并不是秘密。例如,假设某些在线商店订单必须包含一些商品,并且所有商品的价格总和必须恰好为1000.因此,我在MVC3 Web应用程序中实现此逻辑并在订单上进行验证。如果有问题,它会告诉用户有关问题并要求他重新发布表格。

但项目还有另一个重要的部分。这是DB。在这里,我还可以将此验证逻辑包装在一些存储过程中,并仅通过此proc添加订单,以确保没有不一致。 (或者我应该在桌子上使用支票来确定吗?)

这是我跑的卡住了。有必要在两个地方发布逻辑以获得数据完整性。当然,我可能只在DB端存储验证逻辑。但我怀疑这会降低应用程序的性能。

我相信更有经验的人会为这个问题提供完整而优​​雅的解决方案。

那么,我怎样才能在一个地方实现逻辑?

1 个答案:

答案 0 :(得分:2)

简单回答,不是每个人都喜欢

  • 您的数据库将超过您的客户端代码
  • 您的数据库将有多个客户端代码库
  • 通常在几个地方进行验证:您是否信任来自浏览器的用户输入并跳过服务器端验证?
  • 定义“验证”:复杂的业务规则或数据完整性?如果是后者,则它应该是RDBMS的“责任性”

编辑,关于后一部分

并非所有逻辑都需要在数据库中实现:只有几个客户端代码库共有的逻辑。或者,您可以通过单独的层/服务来处理这些常见请求。

请注意,某些业务逻辑基于聚合或跨表或全表检查,这些检查最好在数据库中完成